Маршрут ресурса Laravel 5.7.6 с аутентификацией - PullRequest
0 голосов
/ 03 октября 2018

Я запускаю свой первый проект Laravel (первый проект проекта MVC / OOPHP) и могу использовать некоторую помощь с маршрутами.

Я следовал руководству в https://medium.com/employbl/easily-build-administrator-login-into-a-laravel-5-app-8a942e4fef37, чтобы добавить проверку, если пользовательэто админ при загрузке страницы.Он работает для маршрутов обычного просмотра, например,

Route::get('/admin/something', 'AdminController@admin_something')
->middleware('is_admin')
->name('admin');

Но теперь у меня есть ресурсный маршрут и появляется ошибка, когда я добавляю две -> строки в маршрут.Так что это работает без аутентификации:

Route::resource('thingies', 'ThingyController');

Но с этим:

Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('admin');

Я получаю ошибку Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Слишком мало аргументов для функцииОсветить \ Routing \ PendingResourceRegistration :: name (), 1 передается в /var/www/routes/web.php в строке 24 и ожидается ровно 2

Что мне нужно сделать по-другому, чтобы добавить эту аутентификацию вресурсный маршрут?

Функция is_admin () из учебника:

const ADMIN_TYPE = 'admin';
const DEFAULT_TYPE = 'default';
public function isAdmin()    {        
     return $this->type === self::ADMIN_TYPE;    
}

И промежуточное ПО:

namespace App\Http\Middleware;

use Closure;

class IsAdmin
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
    public function handle($request, Closure $next)
    {
        if(auth()->user()->isAdmin()) {
            return $next($request);
        }
        return redirect('home');
    }
}

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы не можете назвать свой маршрут "admin" с ->name('admin'); в конце маршрута вашего ресурса, потому что он касается всех маршрутов CRUD в одном операторе, и встроенная система Laravel уже назвала их.

Вы на правильном пути, просто удалите последнюю строку, вот так, она должна работать:

Route::resource('thingies', 'ThingyController') ->middleware('is_admin');

0 голосов
/ 03 октября 2018

Вы не можете дать «имя» resource route.но вы можете дать имена каждому методу в resource controller отдельно.

для этого name() функция требует 2 параметра.

  1. имя метода
  2. имядля этого метода route.

,

Route::resource('thingies', 'ThingyController')
    ->middleware('is_admin')
    ->name('create', 'admin.create');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...