Laravel 5:PHP变量在控制器的所有方法间共享

8 浏览
0 Comments

Laravel 5:PHP变量在控制器的所有方法间共享

我有一个资源控制器。路由如下-

Route::resource('branches/{branch_id}/employees', 'EmployeeController');

问题是在每个方法中,我需要将branch变量传递给视图。

public function index($branch_id){
    $branch = Branch::find($branch_id);
    $employees = Employee::orderBy('created_at', 'desc')->get();
    return view('employees.index', compact('branch', 'employees'));
}

有没有办法可以将branch变量传递给通过该控制器返回的每个视图?

@Sapnesh Naik 这不是重复的,因为我需要在每个函数中操作branch变量。

0
0 Comments

问题的原因是$request->get('branch_id')返回null,因为branch_id不是一个请求输入,而是一个路由参数。

解决方法是在控制器的构造函数中添加以下代码:

public function __construct()
{
    view()->share('branch', Route::current()->getParameter('brach_id'));
}

以上代码将branch_id参数的值赋给一个名为branch的视图变量。这样,在控制器的所有方法中都可以通过$branch访问到这个变量的值。

0
0 Comments

Laravel 5: PHP变量在控制器的所有方法中共享

在这种情况下,你可以尝试以下方法:

public function __construct(Request $request)
{
    view()->share(
        'branch', Branch::find($request->route('branch_id'))
    );
}

如果你没有使用类型提示的方法注入,在你的`__construct`方法中,你也可以使用`request()->route('branch_id')`。

在Laravel 5中,有时我们希望在控制器的所有方法中共享一个PHP变量。这在某些情况下非常有用,比如我们想在视图中显示当前分支的信息。然而,如果我们只是简单地在一个方法中定义变量,那么它将无法在其他方法中访问。

为了解决这个问题,我们可以使用Laravel提供的`view()->share()`方法。这个方法可以让我们在所有视图中共享一个变量。在上面的代码示例中,我们在控制器的构造函数中使用这个方法。构造函数会在控制器实例化时自动调用,这意味着我们可以确保变量在控制器的所有方法中都可用。

在构造函数中,我们通过`Request $request`来注入一个请求实例。然后,我们使用`$request->route('branch_id')`来获取当前分支的ID。接下来,我们使用这个ID来查询数据库,找到对应的分支,并将其赋值给`branch`变量。

通过这样的操作,我们就可以在控制器的任何方法中通过`$branch`来访问当前分支的信息了。

另外,如果你没有使用类型提示的方法注入,你也可以使用`request()->route('branch_id')`来获取当前分支的ID。这样就不需要在构造函数中显式注入`Request`实例了。

总之,通过使用`view()->share()`方法,我们可以在Laravel 5的控制器中共享一个PHP变量,并确保它在所有方法中都可用。这样我们就可以轻松地在视图中显示当前分支的信息了。

0