существует несколько способов передачи переменной во все представления. Я объясню несколько способов.
1. используйте промежуточное ПО для всех маршрутов, которые вам нужно передать переменным в:
create middleware (I named it RootMiddleware)
php artisan make:middleware RootMiddleware
go в app/Http/Middleware/RootMiddleware.php
и выполните следующий пример кода:
public function handle($request, Closure $next) {
if(auth()->check()) {
$authUser = auth()->user();
$profil = Profil_user::where('user_id',$authUser->id)->first();
view()->share([
'profil', $profil
]);
}
return $next($request);
}
, затем необходимо зарегистрировать это промежуточное ПО в app/Http/Kernel.php
и поместить эту строку 'root' => RootMiddleware::class,
в protected $routeMiddleware
массив.
, а затем использовать это промежуточное ПО из маршруты или группы маршрутов, например:
Route::group(['middleware' => 'root'], function (){
// your routes that need to $profil, of course it can be used for all routers(because in handle function in RootMiddleware you set if
});
или набор для одиночного root:
Route::get('/profile', 'ProfileController@profile')->name('profile')->middleware('RootMiddleware');
2. другим способом, который вы передаете переменная для всех видов с видом от composer go до app/Http
и создайте папку Composers и внутри нее создайте ProfileComposer.php
, внутри ProfileComposer.php
вот так:
<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
class ProfileComposer
{
public function __construct()
{
}
public function compose(View $view)
{
$profil = Profil_user::where('user_id', auth()->id)->first();
$view->with([
'profil' => $profil
]);
}
}
теперь пришло время создать ваш сервис класс провайдера, я назвал его ComposerServiceProvider
, напишите эту команду в терминале: php artisan make:provider ComposerServiceProvider
после получения Провайдер успешно создан. сообщение go до config/app.php
и зарегистрируйте своего провайдера с указанием этого \App\Providers\ComposerServiceProvider::class
для провайдеров массив. теперь go до app/Providers/ComposerServiceProvider.php
и выполните следующие действия:
namespace App\Providers;
use App\Http\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
View::composer(
'*' , ProfileComposer::class // is better in your case use write your views that want to send $profil variable to those
);
/* for certain some view */
//View::composer(
// ['profile', 'dashboard'] , ProfileComposer::class
//);
/* for single view */
//View::composer(
// 'app.user.profile' , ProfileComposer::class
//);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
3. возможно, что без создания поставщика услуг поделитесь своей переменной в AppServiceProvider
, go до app/Provider/AppServiceProvider.php
и сделайте следующее:
// Using class based composers...
View::composer(
'profile', 'App\Http\View\Composers\ProfileComposer'
);
// Using Closure based composers...
View::composer('dashboard', function ($view) {
//
});
Я надеюсь, будет полезно