Я опробовал этот 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/
Пожалуйста, дайте мне знать, что правильно, а что нет.
Я не думаю, что я понимаю, что вы спрашиваете … У меня есть некоторые замечания, хотя:
Информация, отправленная методом GET, видна всем, переменные отображаются в URL
Да, это происходит в HTTP-методе GET, ?name=Joe&[email protected]
в конце 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, обрабатывать оба действия отдельно, как я уже говорил ранее.
Других решений пока нет …