【问题标题】:Laravel: Pass current view name to View ComposerLaravel:将当前视图名称传递给 View Composer
【发布时间】: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


【解决方案1】:

所有视图数据都可以通过$view->getData()方法访问。

所以在视图作曲家中你可以这样做

class MyCustomComposer
{
    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $currentView = $view->getData()['view_name'];

        // Do something
    }
}

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2016-12-17
    • 2014-08-13
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2014-07-03
    • 2016-04-14
    • 2021-11-20
    相关资源
    最近更新 更多