【问题标题】:How to pass a second variable from routes.php to a controller in Laravel 5?如何将第二个变量从 routes.php 传递到 Laravel 5 中的控制器?
【发布时间】:2016-07-06 14:14:47
【问题描述】:

我在 Laravel 5 的 routes.php 中定义了以下路线:

Route::get('records/{id}', 'RecordController@show');

但是,我想有一条类似的路线:

Route::get('masterrecord/{id}', 'RecordController@show[masterrecord=true]');

([masterrecord=true] 位是发明出来的,但不起作用)

当我打开一个“主记录”时,我想在控制器中使用完全相同的功能(show 功能在 RecordController 中),但我想传递一个额外的参数(类似于' masterrecord = true') 这将对功能进行轻微更改。我知道我可以引用不同的函数,但我真的不想重复相同的代码。

这是我喜欢在 RecordController 中的那种东西,但我不知道如何使它工作:

public function show($id, $masterrecord = false)

然后对于 records/id 路由,我会将 masterrecord 设置为 false,对于 masterrecord/id 路由,我可以将第二个标志标记为 true。

有什么想法吗?

【问题讨论】:

    标签: php laravel laravel-routing


    【解决方案1】:

    如果你真的想要,你可以在路由定义中传递一个硬编码的值。然后你可以从路由的 action 数组中拉取它。为您提供另一种选择。

    Route::get('masterrecord/{id}', [
        'uses' => 'RecordController@show',
        'masterrecord' => true,
    ]);
    
    public function show(Request $request, $id)
    {
        $action = $request->route()->getAction();
    
        if (isset($action['masterrecord'])) {
            ...
        }
        ...
    }
    

    随意调整命名方式。

    asklagbox blog - random tips and tricks for laravel

    【讨论】:

      【解决方案2】:

      只需将值设为可选并将其设置为默认值

      Route::get('masterrecord/{id}/{masterrecord?}', 'RecordController@show');
      

      控制器:

      public function show($id, $masterrecord = false) {
          if($masterrecord) // only when passed in
      }
      

      【讨论】:

        【解决方案3】:

        您不需要重复任何代码,只需有一个调用show 方法的主记录方法即可:

        Route::get('records/{id}', 'RecordController@show');
        Route::get('masterrecord/{id}', 'RecordController@showMasterRecord');
        
        public function show($id, $master = false) {
            if ($master) {
                ...
            }
            ...
        }
        
        public function showMasterRecord($id) {
            return $this->show($id, true);
        }
        

        【讨论】:

          猜你喜欢
          • 2014-10-30
          • 1970-01-01
          • 2016-03-03
          • 1970-01-01
          • 2016-01-18
          • 2017-06-14
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多