【问题标题】:Laravel retrieve param in class constructor [duplicate]Laravel在类构造函数中检索参数[重复]
【发布时间】:2014-06-03 04:23:26
【问题描述】:

这是我的路线:

Route::controller('/app/{companyId}/', 'HomeController', array('before' => 'auth'));

如何在 __constructor 中检索 $companyId 参数以避免在我的所有操作中单独检索它?

【问题讨论】:

  • 您不必在操作中检索它,我很确定它应该作为参数传入。见laravel.com/docs/routing#route-parameters
  • 这不应被标记为重复。 OP 专门询问如何在 constructor 中获取变量,而不仅仅是如何将其传递给控制器​​。

标签: php laravel laravel-4


【解决方案1】:

如果您想在控制器的 __construct 中获取参数,您可以这样做:

class HomeController extends \BaseController
{
    public function __construct()
    {
        $this->routeParamters = Route::current()->parameters();
    }
}

它将返回路由参数的键值列表(例如:['companyId' => '1']@see \Illuminate\Routing\Route

您还可以使用getParameter()parameter() 方法获取特定参数。

注意:我不确定这是否是个好主意。可能有更优雅的方式来解决或更好地解决您的问题。

【讨论】:

  • 我认为这确实是唯一的出路。我不建议从控制器内部解析路由参数:解析 url 然后将参数传递给控制器​​是路由器的责任。
  • @arthurfl 同意,我不确定这是不是个好主意。但如果你必须这样做:)。我会用警告修改我的答案。
  • 我认为Route::resource 将是完成这项工作的最佳工具。
【解决方案2】:

如果你想让这个过程更简单,路由模型绑定似乎是最简单的方法。您不必在控制器的每个操作中获取正确的模型实例,而是在路由过程中将正确的模型传递给您的控制器。

但是你必须使用 Route::resource。在 routes.php 中:

Route::bind('company', 'Company');
Route::resource('company', 'HomeController');

然后你有一个类别的实例传递给你的控制器。例如 /company/1 :

public function show($company)
{
    // Here you can use, for instance, $company->name
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多