我正在与Laravel进行一些路由。我需要将url部分作为参数传递给控制器。
我知道这可以通过:Route::get('user/{name}', function($name){});
实现,但由于到目前为止我的所有代码都以这种方式路由:Route::get('/{param}', array('uses' => 'CustomerController@index')
我想保持一致,因此想知道是否有可能以这种方式将参数传递给控制器?
答案 0 :(得分:1)
是的,这是可能的。只需声明您的CustomerController::index
方法,如下所示:
public function index($param)
{
}
参考:http://laravel.com/docs/controllers#basic-controllers
请注意,可选参数需要默认值。例如,
// the route
Route::get("/{param?}", array("uses"=>"CustomerController@index"));
// in the controller
public function index($param = null)
{
}
如果没有默认值,当Laravel尝试路由到没有参数的方法时,您将收到“缺少参数”错误。
答案 1 :(得分:1)
我看到你刚刚接受了答案,但我会点击提交备用版本......
您可以将自定义服务(称为UrlProvider)注入控制器的构造函数中。然后,只需访问该服务即可获取URL的相关部分。请原谅任何语法错误,自从我编写任何PHP以来已经有几年了......
public class MyController
{
private $urlP;
//dont forget to bind the UrlProvider in the IoC setup.
public __construct(UrlProvider provider)
{
$urlP = provider
}
public function Index()
{
urlP.GetUrl();
}
}
public class UrlProvider()
{
function getUrl()
{
//you can parse out the relevant part of the URL here if you need.
return Request::path();
}
}