通过使用Laravel将参数传递给控制器​​?

时间:2014-07-10 20:32:15

标签: laravel laravel-routing

我正在与Laravel进行一些路由。我需要将url部分作为参数传递给控制器​​。

我知道这可以通过:Route::get('user/{name}', function($name){});实现,但由于到目前为止我的所有代码都以这种方式路由:Route::get('/{param}', array('uses' => 'CustomerController@index')

我想保持一致,因此想知道是否有可能以这种方式将参数传递给控制器​​?

2 个答案:

答案 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();
  }

}