【问题标题】:Have a dynamic optional route parameter in index在索引中有一个动态的可选路由参数
【发布时间】:2015-10-16 01:51:53
【问题描述】:

我用:

Route::controller('home', 'HomeController');

在我的路由中将所有路由链接到我的控制器。

我的控制器中有一个getIndex() 函数,当我转到“/home”时会执行该函数。

我有一个案例,我想路由到“/home/slug”,但并非总是如此。

我尝试使用getIndex($slug),但它总是要求输入“/home/index/{slug?}”。我不希望出现索引。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    亚瑟的回答是:

    Route::get('home/{slug}','HomeController@slugedIndex');
    Route::controller('home', 'HomeController');
    

    虽然它不起作用,因为在 'home/' 之后编写的任何内容现在都将进入第一条路由(以及 HomeController@slugedIndex)。

    我找到了一个解决方法。我在 routes.php 中取出了路由:

    Route::controller('home', 'HomeController');
    

    然后在我的 HomeController 中,我使用了 missingmethod(),只要在控制器中找不到方法,就会调用它。

    这是缺少的方法:

    public function missingMethod($parameters = array())
    {
        $sSlug = is_string($parameters) ? $parameters : '';
        $oObject = Object::where('slug', $sSlug)->first();
    
        if ($oObject) {
            // slug code
        }
        else {
                // 404 code
        }
    }
    

    【讨论】:

      【解决方案2】:

      就文档而言,不可能使用隐式控制器(因为它似乎强制执行 RESTFUL 模式)。

      但您可以为此创建一条新路线:

         Route::get('home/{slug}','HomeController@slugedIndex');
         Route::controller('home', 'HomeController');
      

      编辑:正如史蒂夫所指出的,控制器方法必须在 get 方法之后,这样一个就不会覆盖另一个。

      【讨论】:

      • 感谢@Arthur Samarcos 的回答,它几乎可以工作,但我需要在设置控制器路由之前放置 get 路由,否则 Laravel 找不到关联的方法(查看隐式控制器方法) .正确的代码:Route::get('home/{slug}', 'HomeController@slugIndex'); Route::controller('home', 'HomeController');
      • 谢谢,我会更改答案以避免此问题。
      • 对不起@Arthur Samarcos,但它仍然不起作用。我找到了解决方案,我会回答的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2013-10-29
      • 2013-06-08
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多