【问题标题】:Laravel 5.8 add data to a layout variable via controller constructorLaravel 5.8 通过控制器构造函数将数据添加到布局变量
【发布时间】:2020-10-30 06:53:28
【问题描述】:

我正在尝试通过控制器构造函数将数据添加到布局变量。我之所以要这样做是因为在调用此控制器时,我总是需要将类别添加到顶部菜单中。

目前没有成功。我通过这样的视图编辑器将数据添加到布局中。

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Menu;

class MenuComposer
{
    public function compose(View $view)
    {
        if (in_array($view->getName(), ['layouts.master', 'layouts.master-post', 'layouts.error']))
        {
            $menu = Menu::menu('topmenu');

            view()->with('topmenu',  $menu);
            // view()->share('topmenu',  $menu); not working either
        }
    }
}

我想在 Controller 构造函数中扩展数据。

namespace App\Http\Controllers\Post;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\View\View;

class PostController extends Controller {
    public function __construct(View $view)
    {
        $view->offsetGet('topmenu');
        // $view->gatherData() not working either
    }

无论我尝试什么,Laravel 都会抛出异常:

在构建 [App\Http\Controllers\Post\PostController, Illuminate\View\View] 时,目标 [Illuminate\Contracts\View\Engine] 不可实例化。

【问题讨论】:

  • 即使这没有出错,您要做的只是让服务容器为您解析一个 View 实例并在其上调用一些东西。它不会影响您从控制器返回的视图。
  • 你能描述一下你想要实现的目标吗,因为它在代码中(对我来说)没有清楚地表达出来?
  • 添加更多数据并尝试清楚,我不清楚这是什么以及您尝试实现的目标!

标签: laravel variables view


【解决方案1】:

我在serviceprovider启动函数中做了什么:

view()->share('topmenu', [
    'items' => $newItemsToAdd
]);

在 viewComposer 中我做了:

$extraItems = view()->shared('topmenu');

if (!empty($extraItems)) {
    $items = aray_merge($items, $extraItems);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多