【发布时间】:2020-04-19 03:49:18
【问题描述】:
我在 Laravel 中有一个刀片文件,名为 products.blade.php。在该文件中,我包含一个子视图,它显示来自数据库的数据。子视图正在使用 View Composer 获取数据(以避免在需要显示该数据的任何地方编写相同的代码)。
是否可以将“主”视图的名称传递给该 View Composer?
在我的 AppServiceProvider 中有以下代码:
view()->composer('*', function ($view) {
view()->share('view_name', $view->getName());
});
所以子视图知道父视图的名称。我试过了:
@include('sub-view.name', ['parent' => $view_name])
并尝试访问 View Composer 中的 parent 变量,但我得到:Undefined variable: parent。
我也在 View Composer 的 compose 方法中尝试了 $view->getName(),但是它给了我 sub-view 的名称,我需要 parent。
任何帮助将不胜感激。
提前致谢
【问题讨论】:
-
您可以在控制器中使用
View::composer与视图编辑器共享数据。这会有帮助吗? -
我最终在 View Composer 中使用:
$view->getData()来检索传递给视图的所有数据,包括 view_name 变量 -
那么你有父视图名称吗?
-
没错,但只是因为我在 AppServiceProvider 中传递了它。基本上,视图可以访问的所有数据都可以通过
$view->getData()访问,包括view_name(我在 AppServiceProvider 中传递的那个) -
你不应该那样做。视图合成器不应该知道它正在合成什么视图。如果您需要将视图名称传递给作曲家,那么您做错了。就像视图不应该知道什么控制器正在渲染它一样,视图也不应该知道附加了哪些作曲家。作曲家应该只给视图一些数据。
标签: laravel laravel-blade