【问题标题】:Passing data from a route to a controller [Laravel]将数据从路由传递到控制器 [Laravel]
【发布时间】:2016-07-25 21:59:52
【问题描述】:

我想将一个变量从我的路由文件传递给指定的控制器。不使用参数,因为信息不在 URL 中。我想不出使用以下代码传递它的方法。

Route::get('faqs', [
    'as' => 'thing',
    'uses' => 'Controller@method',
]);

我知道您也可以重定向到控制器,但错误表明该方法不存在,搜索后我发现必须将控制器分配给路由,之后它仍然是相同的错误,但在不同的位置。

有什么想法吗?

【问题讨论】:

  • 从 MVC 的角度来看,这个问题没有多大意义。路由文件只是定义路由,它不应该关心将变量传递给控制器​​(在 URL 参数之外)。如果您正在该路由文件中处理某种逻辑以传递给控制器​​,那么最好将其放置在某些中间件中。我认为,如果您解释需要在路由文件中提供参数的潜在问题或您要尝试完成的事情,我们可能会想出更好的方法。
  • 对于 GET 请求,您只能将数据作为参数传递,否则使用 POTS 您可以传递任何数据,但使用表单或 JS。您能否解释一下您想要传递哪些数据,并详细说明您打算通过这种方式做什么?
  • 如果不使用函数参数或输入参数,控制器将如何访问数据?

标签: php laravel


【解决方案1】:

实现此目的的一种方法是通过将自定义字段添加到 attributes 属性来创建自定义 middleware

你会这样做的;

$request->attributes->add(['customVariable' => 'myValue']);

【讨论】:

    【解决方案2】:

    您可以使用 Route::bind 为特定的 slug 赋值

    Route::bind('parameter', function($parameter)
    {
        return SomeModel::where('name',$parameter)->first();
    });
    
    Route::get('faqs/{parameter}', [
        'as' => 'thing',
        'uses' => 'Controller@method',
    ]);
    

    并在你的控制器中将其设置为方法参数

    public function method(SomeModel $model)
    {
        dd($model);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2019-07-10
      • 2019-06-18
      • 2017-05-14
      • 1970-01-01
      • 2016-04-16
      • 2019-07-26
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多