在Laravel视图中将URL中的参数直接作为变量传递?

时间:2015-01-18 07:23:08

标签: php url laravel

现在,如果我的一个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超全局,但它是空的。当然必须有更好的方法来做到这一点。

思想?

3 个答案:

答案 0 :(得分:2)

使用此代码:

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

编辑:在最近的Laravel版本中,似乎不再支持以上版本。您应该使用@lukasgeiter答案:

Route::input('name');

答案 1 :(得分:2)

Route::current()->getParameter()有一个很好的快捷方式:

Route::input('name');

答案 2 :(得分:1)

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

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

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

使用传递给它的数据来构建响应是视图的工作。视图不应该关心数据的来源或获取方式,只是它现在拥有它并且可以做它所需要的。您的$missionName应该能够来自网址段,网址请求变量,模型上的字段或您能想到的任何其他位置,但视图不应该知道任何内容。