【问题标题】:Is it possible to pass a route parameter to controller constructor in Laravel?是否可以将路由参数传递给 Laravel 中的控制器构造函数?
【发布时间】:2014-11-04 04:32:47
【问题描述】:

是否可以将路由参数(或路由段)注入控制器构造函数?

你找到一些代码来澄清我的问题。

class TestController{

    protected $_param;

    public function __construct($paramFromRoute)
    {
        $this->param = $paramFromRoute;
    }

    public function testAction()
    {
        return "Hello ".$this->_param;
    }
}

----------------------------------------------------

App::bind('TestController', function($app, $paramFromRoute){
    $controller = new TestController($paramFromRoute);
    return $controller;
});

----------------------------------------------------

// here should be some magic
Route::get('foo/{bar}', 'TestController'); 

【问题讨论】:

    标签: php laravel laravel-4 dependency-injection


    【解决方案1】:

    无法注入它们,但您可以通过以下方式访问它们:

    class TestController{
    
        protected $_param;
    
        public function __construct()
        {
            $id = Route::current()->getParameter('id');
        }
    
    }
    

    【讨论】:

    【解决方案2】:

    Laravel 5.3.28

    你不能注入参数... 但是,您可以注入请求并从路由器实例中获取它,如下所示:

    //route: url_to_controller/{param}
    public function __construct(Request $request)
    {
       $this->param = $request->route()->parameter('param');
    }
    

    【讨论】:

    • 或者干脆$request->param
    【解决方案3】:

    Laravel 5.4中,你可以使用这个来请求参数:

    public function __construct(Request $request) {
       $id = $request->get("id");
    }
    

    【讨论】:

    • 或者干脆$request->id
    【解决方案4】:

    LARAVEL 8 更新

    你可以使用 route() 方法从 laravel 8 的路由 url 参数中获取值:

    $id = request()->route('id')
    

    【讨论】:

      【解决方案5】:

      最后,但最重要的是,您可以简单地“类型提示”由容器解析的类的构造函数中的依赖关系,包括控制器、事件侦听器、队列作业、中间件等。实际上,这就是容器解析大多数对象的方式。

      http://www.golaravel.com/laravel/docs/5.1/container/

      【讨论】:

        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 2016-05-16
        • 2017-01-12
        • 2012-09-20
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多