【问题标题】:Get parameter passed in URL in Laravel view as variable directly?直接在Laravel视图中获取URL中传递的参数作为变量?
【发布时间】:2015-03-16 11:27:44
【问题描述】:

现在,如果我的某个 Laravel 项目的 URL 中有参数,我必须检测路由并获取参数:

Route::get('mission/{name}', 'MissionsController@show');

将$name 参数作为参数传递给我的控制器:

class MissionsController extends BaseController {
  public function show($missionName) {
     ... 
  }

}

然后将它传递给在我的控制器方法中返回的视图:

return View::make('missions.mission', array(
    'name' => $missionName
));

在此之前在我看来使用$missionName 变量:

<p>{{ $missionName }}</p>

这是一种相当迂回的做法。有什么方法可以直接在我的视图中从 URL 获取参数?我试过访问$_GET 超全局,但它是空的。当然,必须有更好的方法来做到这一点。

想法?

【问题讨论】:

    标签: php url laravel


    【解决方案1】:

    使用此代码:

    {{ Route::current()->getParameter('theParameterName') }}
    

    编辑:最近的 Laravel 版本似乎不再支持上述内容。您应该改用@lukasgeiter 答案:

    Route::input('name');
    

    【讨论】:

    • getParameter 方法似乎不存在。
    【解决方案2】:

    Route::current()-&gt;getParameter() 有一个不错的快捷方式:

    Route::input('name');
    

    【讨论】:

      【解决方案3】:

      对于小型项目或简单示例,这似乎是一种“迂回”的方式,但这是应该的方式。为了创建更可重用、质量更高的代码,您需要这种关注点分离。接下来是一个过于简单的想法。

      确定需要调用哪个控制器并确保使用正确的参数调用它是您路由的工作。

      控制器的工作是读取应用程序的状态(输入)、与模型通信(如果需要)、将数据发送到视图并返回响应。关于这是否违反单一责任原则,有很多意见,但这里不需要赘述。

      视图的工作是使用传递给它的数据来构建响应。视图不应该关心数据来自哪里或如何获得,只关心它现在拥有它并且可以做它需要的事情。您的 $missionName 应该能够来自 URL 段、URL 请求变量、模型上的字段或您能想到的任何其他位置,但视图不应该知道这些。

      【讨论】:

      • 谢谢,我没有考虑这种方法。我实际上要做的是解析 Route 参数以在过滤器中使用,以在执行我的控制器之前检查它是否真的存在于我的数据库中,因此在这种情况下需要它。但我确实理解你的论点并同意你的观点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多