Так работает метод AltoRouter GET POST?

Я опробовал этот altorouter уже несколько недель. Похоже, это хороший роутер, где не так много рабочих примеров на сетях или на официальном сайте. Вам нужно как-то это понять и выполнить работу.

Я попробовал базовый метод GET и POST, используя altorouter, и не знаю, правильно ли это делать.

Простой метод GET в php

<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, можно добавить страницу в закладки. Где находится 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/

Пожалуйста, дайте мне знать, что правильно, а что нет.

4

Решение

Я не думаю, что я понимаю, что вы спрашиваете … У меня есть некоторые замечания, хотя:


Информация, отправленная методом GET, видна всем, переменные отображаются в URL

Да, это происходит в HTTP-методе GET, ?name=Joe&email=joe@example.com в конце URL-адреса называется «строка запроса». Одно из отличий метода POST заключается в том, что данные являются частью URL, поэтому они видимы (хотя не верьте, что это не так. видимый в противном случае) и, как вы говорите, это можно добавить в закладки.


На GET vs POST прочитайте об использовании этих методов и определите один для каждого маршрута. Я не думаю, что это хороший дизайн, не говоря уже о том, что его легко обслуживать, иметь несколько методов, привязанных к одному контроллеру. Воспользуйтесь преимуществами роутера, сопоставьте различные методы, например:

$router->map('GET','/contactus', 'showContactForm');
$router->map('POST','/contactus', 'processContactForm');

Поскольку вы помечаете вопрос с помощью «MVC», вы можете разделить вещи дальше, и ваши контроллеры будут просто контроллерами, которые в свою очередь вызывают или генерируют представления. Или вы можете просто использовать полный MVC-фреймворк, даже такой легкий, как люмен, который управляет маршрутизацией, просмотром шаблонов, подключением к базе данных, аутентификацией и многим другим.


<form action="../welcome/" method="post">

От http://localhost/altrouter/contactus/ в http://localhost/altrouter/welcome/ относительный URL может быть просто welcome, .. означает «перейти в каталог».


URL, который я получаю после отправки формы, это

http://localhost/altrouter/contactus/

Я не понимаю, почему, если форма успешно отправлена, как вы говорите, вы должны быть в http://localhost/altrouter/welcome/


избежать $_SERVER["PHP_SELF"], Это привносит ненадежность. Форма без атрибута действия будет просто отправлена ​​на тот же URL. С помощью метода POST вы можете, для одного и того же URL, обрабатывать оба действия отдельно, как я уже говорил ранее.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector