【问题标题】:Laravel routing: how to pass parameter to controller (not via URL)?Laravel 路由:如何将参数传递给控制器​​(不是通过 URL)?
【发布时间】:2014-10-05 19:10:31
【问题描述】:

我有两条路线:A/{param}/CB/{param}/C。我也有一个带有方法的控制器:

public function index($param, $param1 = false)
{
    //...
}

A/{param}/C 的情况下,我只传递一个参数——一个在URL 中指定的参数,并且该函数使用第二个参数的默认值。在第二条路线的情况下,我想将true 作为第二个参数传递。由于没有在 URL 中指定,如何将其传递给函数?

【问题讨论】:

    标签: php laravel laravel-4 controller routing


    【解决方案1】:

    如果我对您的理解正确,不使用 $_POST,您将无法在不位于 URI 中某处的情况下传递参数(在设置会话变量之外,我不建议这样做)

    另一种选择可能是将其作为查询字符串参数传递。它仍然会在 url 中,但不一定会被路由模式捕获

    网址:

    A/{param}/C
    B/{param}/C?param1=true
    

    --
    控制器:

    public function index($param)
    {
    
       $param1 = Request::query('param1'); // if not present false, if present, {value}
    
    }
    

    --

    或者,如果您想要一个友好的 URL,您可以在第二个参数之后放置一个问号,表明它可能存在也可能不存在。这将匹配以下两个 URL

    网址:

    A/{param}/C
    B/{param}/C/true
    

    路线:

    Route::get('B/{param}/C/{param1?}', 'YourController@index');
    

    控制器:

    public function index($param, $param1 = false)
    {
       //
    }
    

    【讨论】:

    • 所以我不能在数组中传递它('as' => '...', 'uses' => 'MyController@index', 'param1' => true) 或任何其他方式?
    • 对两者都使用index 方法时不会。您可以使用Route::get('A/{param}/C', 'YourController@index');,其中$param1 设置为false,然后第二条路由指向不同的方法Route::get('B/{param}/C', 'YourController@index2');,其中$param1 设置为true。为了保持你的代码 DRY,你可以在 index2 中有一行代码调用 index,传入 true return $this->index($param, true);
    猜你喜欢
    • 2020-04-03
    • 2016-05-16
    • 2017-01-12
    • 2021-01-28
    • 1970-01-01
    • 2017-08-09
    • 2019-06-18
    • 2012-09-20
    相关资源
    最近更新 更多