我正在使用Alto路由器进行项目。当我提交表单时,我的问题来了,我找不到使重定向工作的解决方案。 我的项目结构:
root
|/elements
|- layout.php
|/public
|- index.php
|/templates
|- add.php
|- home.php
|- login.php
我在操作属性中尝试了不同的网址。我还尝试将其留空并使用标题("位置"(进行重定向。
以下是我处理路由器的方式:
$router = new AltoRouter();
$router->map('GET', '/', 'home', 'home');
$router->map('GET', '/login', 'login', 'login');
$router->map('GET', '/add', 'add', 'add');
$match = $router->match();
if (is_array($match)) {
if (is_callable($match['target'])) {
call_user_func_array($match['target'], $match['params']);
} else {
$params = $match['params'];
ob_start();
require "../templates/{$match['target']}.php";
$pageContent = ob_get_clean();
}
require '../elements/layout.php';
} else {
echo '404';
}
现在,在添加页面上,我有一个表单,应该添加到我的数据库,然后重定向到主页。这就是我卡住的地方(此外,用于插入的数据库部分可能包含错误,但我稍后会处理它(:
<?php
use AppApp;
if (!empty($_POST)) {
$he = App::getPDO()->prepare("INSERT INTO huiles(name_simple, name_science, elements, dilution, props) VALUES (?, ?, ?, ?, ?)");
$params = [
$_POST['name_simple'],
$_POST['name_science'],
$_POST['elements'],
$_POST['dilution'],
$_POST['props']
];
$he->execute($params);
}
?>
<form action="<?= $router->generate("home") ?>" method="post">
<div class="form-group">
<label for="name_simple">Nom</label>
<input type="text" name="name_simple" class="form-control">
</div>
<div class="form-group">
<label for="name_simple">Nom scientifique</label>
<input type="text" name="name_science" class="form-control">
</div>
<div class="form-group">
<label for="name_simple">Elements</label>
<input type="text" name="elements" class="form-control">
</div>
<div class="form-group">
<label for="name_simple">Dilution</label>
<input type="text" name="dilution" class="form-control">
</div>
<div class="form-group">
<label for="name_simple">Propriétés</label>
<input type="text" name="props" class="form-control">
</div>
<button class="btn btn-primary">Ajouter</button>
</form>
我应该如何处理路由器在提交后(以及将数据添加到数据库后(重定向到主页?
您必须首先使用 POST 方法定义到处理文件的路由,因为您要发送一个表单:
$router->map('POST', '/treatement', function() {
require __DIR__ . 'treatement.php';
});
在您看来:
<form method="post" enctype="multipart/form-data" action="/treatement">
在治疗中.php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (// If form is not complete, error, etc ..) {
echo '<h1>Failed to send</h1>
<a href="/form"<button type="button">
Come back to the form
</button></a>';
} else {
//Insert database and redirect to the home for example
echo '<h1>Success</h1>
<a href="/home"<button type="button">
Come back to the home
</button></a>';
}
}