【问题标题】:Laravel4 routing to method with argumentsLaravel4 路由到带参数的方法
【发布时间】:2014-03-28 16:57:59
【问题描述】:

我在 CodeIgniter 之后才开始使用 Laravel,有些事情让我很困惑。

我有一个PagesController,它负责显示静态页面,例如关于、联系人、隐私等。

现在,我不想在 PagesController 上创建 3-4 个方法,而是想创建一个名为 ShowPage($which) { } 的方法,并且知道要显示哪个页面。

问题是>我无法理解路线问题:

Route::get('about','PagesController@ShowPage'); <--- I need to pass 'about' here
Route::get('contact','PagesController@ShowPage');
Route::get('about','PagesController@ShowPage');

这可能吗,还是我需要为每种情况创建一个方法?

这是我的确切代码:

控制器:

class PagesController extends BaseController {

    function showPage($which) {
        echo $which;
    }
}

路线:

Route::get('about','PagesController@showPage');
Route::get('contact','PagesController@showPage');
Route::get('about','PagesController@showPage');`

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    您可以使用

    直接在控制器内部访问路由
    switch(Request::path()){}
    

    解析为 about、contact 等

    另一种方法是使用

    Route::get('{page}', 'PagesController@ShowPage');
    

    这将像在控制器中传递变量

    public function showPage($page){}
    

    但请注意,此路由将匹配任何路径,

    如果上面没有其他匹配项。

    【讨论】:

    • 这是个坏主意,既然页面参数是传递给函数的,那么他为什么要使用Request::path()和switch是完全没有必要的。
    【解决方案2】:

    它们已经被传递给方法:

    public function ShowPage($which){
      switch($which){
       case 'about':
            // do something
            break;
       case 'contact':
            // do something else
            break;
       default:
            break;
      }
    }
    

    【讨论】:

    • 嗯..我只收到Missing argument 1 for PagesController::showPage()
    • 您在调用其中一条路线时收到了吗?
    【解决方案3】:

    你可以试试这个:

    // In your routes.php (This route will match only this route because of "where")
    Route::get('{page}','PagesController@showPage')->where('page', 'about|contact');
    

    如果你使用http://example.com/about(或contact),它会起作用,但如果使用其他值,它将不起作用,换句话说,如果没有aboutcontact,这条路线将无法匹配。

    然后在你的控制器中,试试这个:

    class PagesController extends BaseController {
        public function showPage($page) {
            // use $page, don't use use switch, $page will be either about or contact
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2015-12-10
      相关资源
      最近更新 更多