【问题标题】:Calling a Slim named route throws exception调用 Slim 命名路由会引发异常
【发布时间】:2016-04-01 05:49:44
【问题描述】:

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

【问题讨论】:

    标签: routing slim named-routing


    【解决方案1】:

    避免使用斜线命名您的路线。

    试试这个:

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

    【讨论】:

    • @Rob 你在谈论另一个帖子吗?这个问题是关于 Slim,而不是 jQuery。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多