Как добавить сервис-провайдер только для админ-панели?
Можно ли зарегистрировать сервис-провайдер только если пользователь находится в админ-панели?
Это нужно проверять роутер, к примеру если в админке есть префикс ['prefix' => 'admin'] ?
А вообще нужно что-то наподобии такого https://stackoverflow.com/questions/39844709/how-do-i-call-a-model-in-a-custom-laravel-5-3-config-file
т.е. чтобы можно было из конфиг-файла обращаться к модели.
В приведённой статье пишут, что нужно создать ключ в файле app.php 'user_model' => App\Models\User::class,
потом обращаться так: $user = config('app.user_model'); // app in file name
но у меня выдаёт ошибку:
Fatal error: Uncaught RuntimeException: A facade root has not been set. in \vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:258
т.е. мне нужно в админке из конфиг файла обращаться к модели.
config/app.php
'page_model' => App\Models\Page::class,
Использую модуль adminlte, и в конфиг-файле config/adminlte.php мне нужно узнать количество записей, 'label' => config('app.page_model')->count(),
но выдаёт ошибку
т.е. мне нужно сделать так, чтобы это работало только а админке, а если сделать запись в config/app.php, тогда лишний запрос будет срабатывать и во фронтенде как я понимаю
P.S.
use App\Models\Car;
use Illuminate\Support\Facades\Auth;
class Admin {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
if (!Auth::guard('web')->check()) {
abort(403);
}
if (auth()->guard('web')->check()) {
config(['pages' => Car::count()]);
}else {
config(['pages' => 22]);
}
return $next($request);
}
}
config/adminlte.php
[
'text' => 'pages',
'url' => 'admin/pages',
'icon' => 'far fa-fw fa-file',
'label' => config('pages'), //количество страниц не работает
'label_color' => 'success',
],
т.е. если вместо config('pages') поставить любое число, то в меню будет показывать это число, а этот конфиг не работает config('pages')
Можете подсказать почему так?
А в контроллерах config('pages') эта переменная доступна и выводит количество
P.S.
public function handle($request, Closure $next) {
if (auth()->guard('web')->check()) {
config([
'adminlte.menu' => [
[
'text' => 'cars',
'url' => 'admin/cars',
'icon' => 'fas fa-fw fa-car',
],
[
'text' => 'pages',
'url' => 'admin/pages',
'icon' => 'far fa-fw fa-file',
'label' => Car::whereStatus(1)->count(),
'label_color' => 'success',
]
Ответы (1 шт):
1. middleware лучше для этого типа вещей, так как вы можете применить его к любому маршруту / группе маршрутов, которые вы хотите.
class Admin
{
public function handle($request, Closure $next, $role)
{
//1. Проверка через роль
// if (!(auth()->check() && auth()->user()->role_id ==1))
// abort(403);
// 2.
if (!Auth::guard('admin')->check()) {
abort(403);
}
return $next($request);
}
}
Route::group(['middleware' => ['Admin']], function () {
Route::get('admin', 'SomeController@action1');
Route::get('admin/dashboard', 'SomeController@action2');
// .....
});
2. Вариант с сервис провайдером
Здесь * означает - во всех ваших представлениях доступна переменная $currentUser.
public function boot()
{
view()->composer('*', function($view)
{
if (auth()->guard('admin')->check()) {
$view->with('currentUser', auth()->user());
}else {
$view->with('currentUser', null);
}
});
}
view()->composer('*', function($view) будет выполняться только тогда, когда представление(view) фактически составлено.
**
$ php artisan config:cache