我是Slim框架的新手,现在我的命名路由有这个问题...第一条路线的代码是这样的
$app->get('/admin/home', function() use ($app){
if(!isset($_SESSION)){
$app->render('admin/login.php', [
'message' => 'Restricted access!'
]);
}else{
session_start();
$app->render('admin/home.php', [
'username' => $_SESSION['username']
]);
}
})->name('/admin/home');
但是,当我从另一个这样的路线呼叫此路线时
$app->post('/admin/login', function() use ($app, $conn) {
$app->urlFor('/admin/home');
})->name('/admin/login');
它抛出一个异常"已存在的命名路由名称为:/ admin / login"
我只是没有得到它...甚至可以从另一条路线呼叫一条路线?正如我在Slim文档中看到的应该是......我哪里出错了?谢谢
答案 0 :(得分:0)
避免使用斜杠命名路线。
而是试试这个:
$app->get('/admin/home', function() use ($app){
// details here
})->name('admin_home');
这样打电话:
$app->post('/admin/login', function() use ($app, $conn) {
echo $app->urlFor('admin_home'); // test it
})->name('admin_login');
此外,在这两个例子中,你给的那些名字目前没什么优势。你说的是:'让我找到/admin/home
的路线并返回/admin/home
。如果它们相同,为什么不使用字符串。更确切地说,命名路线是方便的方法,当你做一些事情,例如返回网址不完全清楚的事情时,这些方法非常有用。
简单示例:
name('user_login')
可以映射到users/login
但name('admin_login')
可能会映射到admin/login
增加清晰度的路线:
name('all_customers')
- > /customers
name('top_n_customers)
- > /customers/top/{count:[0-9]+}
name('recent_n_customers)
- > /customers/recent/{count:[0-9]+}
<强>票友强>
`name('filtered_customers)` -> `/customers/{field:[a-z]+}/{value}`
// example:
/customers/country/spain // customers in Spain
/customers/created/2016-01-01 // New customers this year
显然,在最后一个示例中,您必须检查有效字段并在不支持时返回相应的响应。
注意:语法适用于Slim Framework 3.0。相应地调整版本2.0。