调用Slim命名路由会引发异常

时间:2015-12-26 21:53:39

标签: routing slim named-routing

我是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文档中看到的应该是......我哪里出错了?谢谢

1 个答案:

答案 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。