获取URL in Laravel 中传递的参数直接作为变量查看?
Get parameter passed in URL in Laravel view as variable directly?
现在,如果我在我的 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
超全局,但它是空的。当然,必须有更好的方法来做到这一点。
想法?
使用此代码:
{{ Route::current()->getParameter('theParameterName') }}
编辑:最近的 Laravel 版本似乎不再支持以上内容。您应该改用@lukasgeiter 的回答:
Route::input('name');
对于小型项目或简单示例,这似乎是一种 "roundabout" 方式,但实际上应该如此。为了创建更多可重用的高质量代码,您需要进行这种关注点分离。下面是一个过度简化的想法。
确定需要调用哪个控制器并确保使用正确的参数调用是您路由的工作。
控制器的工作是读取应用程序的状态(输入)、与模型通信(如果需要)、将数据发送到视图以及 return 响应。关于这是否违反了单一职责原则,有很多意见,但没有必要在这里讨论。
视图的工作是使用传递给它的数据来构建响应。视图不应该关心数据来自哪里或如何获得,只关心它现在拥有它并且可以做它需要的事情。您的 $missionName
应该能够来自 URL 段、URL 请求变量、模型上的字段或您能想到的任何其他地方,但视图不应该知道这些。
Route::current()->getParameter()
有一个很好的快捷方式:
Route::input('name');
现在,如果我在我的 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
超全局,但它是空的。当然,必须有更好的方法来做到这一点。
想法?
使用此代码:
{{ Route::current()->getParameter('theParameterName') }}
编辑:最近的 Laravel 版本似乎不再支持以上内容。您应该改用@lukasgeiter 的回答:
Route::input('name');
对于小型项目或简单示例,这似乎是一种 "roundabout" 方式,但实际上应该如此。为了创建更多可重用的高质量代码,您需要进行这种关注点分离。下面是一个过度简化的想法。
确定需要调用哪个控制器并确保使用正确的参数调用是您路由的工作。
控制器的工作是读取应用程序的状态(输入)、与模型通信(如果需要)、将数据发送到视图以及 return 响应。关于这是否违反了单一职责原则,有很多意见,但没有必要在这里讨论。
视图的工作是使用传递给它的数据来构建响应。视图不应该关心数据来自哪里或如何获得,只关心它现在拥有它并且可以做它需要的事情。您的 $missionName
应该能够来自 URL 段、URL 请求变量、模型上的字段或您能想到的任何其他地方,但视图不应该知道这些。
Route::current()->getParameter()
有一个很好的快捷方式:
Route::input('name');