这就是 AltoRouter GET POST 方法的工作原理吗?
Is this how AltoRouter GET POST method work?
我已经试用这个 altorouter 好几个星期了。这看起来是一个很好的路由器,在网络或官方网站上没有多少工作示例。您需要以某种方式理解它并完成工作。
我使用 altorouter 尝试了基本的 GET 和 POST,但不知道这是否是正确的方法。
php
中的简单 GET 方法
<html>
<head>
</head>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
我使用 AltoRouter 的方式
Index.php
<?php
require 'library/AltoRouter.php';
$router = new AltoRouter();
$router->setBasePath('/AltRouter');
$router->map('GET','/', function() {require __DIR__ . '/catalog/controller/home.php';}, 'home');
$router->map('GET|POST','/aboutus/', function() {require __DIR__ . '/catalog/controller/aboutus.php';}, 'aboutus');
$router->map('GET|POST','/contactus/', function() {require __DIR__ . '/catalog/controller/contactus.php';}, 'contactus');
$router->map('GET|POST','/welcome/', function() {require __DIR__ . '/catalog/controller/welcome.php';}, 'welcome');
$match = $router->match();
if( $match && is_callable( $match['target'] ) ) {
call_user_func_array( $match['target'], $match['params'] );
} else {
// no route matched
header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}
contactus.php(获取方法)
<html>
<head>
</head>
<body>
<form action="../welcome/" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
welcome.php
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
出于某种奇怪的原因,这行得通,但我觉得这是不对的。原因:GET方式发送的信息大家都可见,变量显示在URL,可以将page.Where收藏为我提交表单后得到的URL这是
http://localhost/altrouter/contactus/
在 URL 中提交表单后没有显示变量。
现在对于 POST 方法,这个有效,你需要让我知道我们是否应该这样做。
Index.php
same as the one posted above
aboutus.php(使用POST方法)
<html>
<head>
</head>
<body>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["first_name"];
$email = $_POST["email_address"];
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
}
?>
<form action="<?php $_SERVER["PHP_SELF"]?>" method="post">
Name: <input type="text" name="first_name">
<br><br>
E-mail: <input type="text" name="email_address">
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
这有效并且发布的数据被回显,URL 提交后
http://localhost/altrouter/aboutus/
请告诉我什么是对的,什么是错的。
我不认为我明白你在问什么......不过我确实有一些观察:
Information sent with the GET method is visible to everyone, the variables are displayed in the URL
是的,这发生在 HTTP 方法 GET 中,url 末尾的 ?name=Joe&email=joe@example.com
称为“查询字符串”。它与方法 POST 的区别之一是数据是 url 的一部分,因此它是可见的(尽管不要相信它不是 可见的 否则) 正如你所说,它可以被收藏起来。
关于 GET 与 POST,了解这些方法的用法并为每个路由决定一个。我认为将多个方法映射到单个控制器不是好的设计,更不用说易于维护了。利用路由器,映射不同的方法,例如:
$router->map('GET','/contactus', 'showContactForm');
$router->map('POST','/contactus', 'processContactForm');
由于您使用“MVC”标记问题,因此您可以进一步分离事物并让您的控制器只是控制器,而控制器又会调用或生成视图。或者,您可以只使用完整的 MVC 框架,甚至是像 Lumen 这样的轻型框架,它管理路由、视图模板、数据库连接、身份验证等等。
<form action="../welcome/" method="post">
从http://localhost/altrouter/contactus/
到http://localhost/altrouter/welcome/
,相对的url可以是welcome
。 ..
表示“上一个目录”。
the URL that I get after submitting the form is this
http://localhost/altrouter/contactus/
我不明白为什么,如果按照你说的那样提交成功,你应该在http://localhost/altrouter/welcome/
避免$_SERVER["PHP_SELF"]
。它带来了insecurities。没有 action 属性的表单将只提交给相同的 url。使用方法 POST,对于相同的 url,您可以像我之前所说的那样分别处理两个操作。
我已经试用这个 altorouter 好几个星期了。这看起来是一个很好的路由器,在网络或官方网站上没有多少工作示例。您需要以某种方式理解它并完成工作。
我使用 altorouter 尝试了基本的 GET 和 POST,但不知道这是否是正确的方法。
php
中的简单 GET 方法<html>
<head>
</head>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
我使用 AltoRouter 的方式
Index.php
<?php
require 'library/AltoRouter.php';
$router = new AltoRouter();
$router->setBasePath('/AltRouter');
$router->map('GET','/', function() {require __DIR__ . '/catalog/controller/home.php';}, 'home');
$router->map('GET|POST','/aboutus/', function() {require __DIR__ . '/catalog/controller/aboutus.php';}, 'aboutus');
$router->map('GET|POST','/contactus/', function() {require __DIR__ . '/catalog/controller/contactus.php';}, 'contactus');
$router->map('GET|POST','/welcome/', function() {require __DIR__ . '/catalog/controller/welcome.php';}, 'welcome');
$match = $router->match();
if( $match && is_callable( $match['target'] ) ) {
call_user_func_array( $match['target'], $match['params'] );
} else {
// no route matched
header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}
contactus.php(获取方法)
<html>
<head>
</head>
<body>
<form action="../welcome/" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
welcome.php
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
出于某种奇怪的原因,这行得通,但我觉得这是不对的。原因:GET方式发送的信息大家都可见,变量显示在URL,可以将page.Where收藏为我提交表单后得到的URL这是
http://localhost/altrouter/contactus/
在 URL 中提交表单后没有显示变量。
现在对于 POST 方法,这个有效,你需要让我知道我们是否应该这样做。
Index.php
same as the one posted above
aboutus.php(使用POST方法)
<html>
<head>
</head>
<body>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["first_name"];
$email = $_POST["email_address"];
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
}
?>
<form action="<?php $_SERVER["PHP_SELF"]?>" method="post">
Name: <input type="text" name="first_name">
<br><br>
E-mail: <input type="text" name="email_address">
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
这有效并且发布的数据被回显,URL 提交后
http://localhost/altrouter/aboutus/
请告诉我什么是对的,什么是错的。
我不认为我明白你在问什么......不过我确实有一些观察:
Information sent with the GET method is visible to everyone, the variables are displayed in the URL
是的,这发生在 HTTP 方法 GET 中,url 末尾的 ?name=Joe&email=joe@example.com
称为“查询字符串”。它与方法 POST 的区别之一是数据是 url 的一部分,因此它是可见的(尽管不要相信它不是 可见的 否则) 正如你所说,它可以被收藏起来。
关于 GET 与 POST,了解这些方法的用法并为每个路由决定一个。我认为将多个方法映射到单个控制器不是好的设计,更不用说易于维护了。利用路由器,映射不同的方法,例如:
$router->map('GET','/contactus', 'showContactForm');
$router->map('POST','/contactus', 'processContactForm');
由于您使用“MVC”标记问题,因此您可以进一步分离事物并让您的控制器只是控制器,而控制器又会调用或生成视图。或者,您可以只使用完整的 MVC 框架,甚至是像 Lumen 这样的轻型框架,它管理路由、视图模板、数据库连接、身份验证等等。
<form action="../welcome/" method="post">
从http://localhost/altrouter/contactus/
到http://localhost/altrouter/welcome/
,相对的url可以是welcome
。 ..
表示“上一个目录”。
the URL that I get after submitting the form is this
http://localhost/altrouter/contactus/
我不明白为什么,如果按照你说的那样提交成功,你应该在http://localhost/altrouter/welcome/
避免$_SERVER["PHP_SELF"]
。它带来了insecurities。没有 action 属性的表单将只提交给相同的 url。使用方法 POST,对于相同的 url,您可以像我之前所说的那样分别处理两个操作。