Laravel Как передать класс в шапку сайта
Прочел что это нужно делать через View Composer
Создал папку в ViewComposers в директории App\Http там создал файл UserinfoComposer.php с таким содержимым:
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use Auth;
class UserinfoComposer {
public function compose(View $view) {
if( Auth::user() ){
$user_data = array(
"username" => Auth::user()['name'],
"logout_link" => route('logout'),
);
return $view->with('userinfo', $user_data);
}
}
}
Далее я создал свой провайдер командой:
php artisan make:provider ComposerServiceProvider
После я сразу добавил его в массив providers файла конфигурации config/app.php вот так:
'providers' => [
...
/*
* Application Service Providers...
*/
...
App\Providers\ComposerServiceProvider::class,
],
А вот содержимое файла ComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Http\ViewComposers\UserinfoComposers;
class ComposerServiceProvider extends ServiceProvider {
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
view()->composer('inc.header', UserinfoComposer::class);
}
}
При запуске сайта получаю такую ошибку от Laravel
Target class [App\Providers\UserinfoComposer] does not exist.
(View: /resources/views/layouts/app.blade.php)
Вот сам файл app.blade.php:
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title-block')</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
@include('inc.header')
<main class="site-main">
@yield('content')
</main>
@include('inc.footer')
</div>
</body>
</html>
Ответы (1 шт):
Автор решения: Enokin
→ Ссылка
У вас опечатка в строке use App\Http\ViewComposers\UserinfoComposers лишняя 's' на конце UserinfoComposers должно быть use App\Http\ViewComposers\UserinfoComposer;