0

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

4

1 回答 1

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。如果它们相同,为什么不使用字符串。相反,命名路由是方便的方法,当您执行诸如返回 url 不完全清楚的事情时很有用。

简单的例子:

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 版本。

于 2016-01-18T21:31:40.093 回答