Использовать аутентификацию в AppServiceProvider - PullRequest
0 голосов
/ 29 февраля 2020

Мне нужен идентификатор пользователя, который вошел в систему, чтобы получить фотографию в таблице профиля, здесь я пытаюсь использовать View, но только в функции индекса, которая получает $profile, я хочу, чтобы все файлы в представлении были есть $profile

public function index(){
  $profil = Profil_user::where('user_id',$auth)->first();
  View::share('profil', $profil);
  return view('user.index');
}

Я также пробовал AppServiceProvider, но я получаю ошибку в виде нулевого значения, если я не вхожу в систему, есть ли решение моей проблемы?

public function boot(){
    $auth = Auth::user();
    dd($auth);
}

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

существует несколько способов передачи переменной во все представления. Я объясню несколько способов.

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) {
      //
});

Я надеюсь, будет полезно

0 голосов
/ 29 февраля 2020

Вы можете использовать это

     view()->composer('*', function($view)
    {
        if (Auth::check()) {
            $view->with('currentUser', Auth::user());
        }else {
            $view->with('currentUser', null);
        }
    });
...