Laravel 5.7 Middleware Routing

166
25 марта 2019, 16:00

Проблема с роутингом в Laravel 5.7 , всё работает на виртуальных серверах openserver и xampp . Залил на хостинг сайт, всё работает кроме админки. Она работает следующим образом , если человек залогинен и он админ, то можно перейти в НазваниеСайта/admin и откроется админка.Но при переходе туда возникает ошибка - Call to undefined method App\Http\Middleware\AdminMiddleware::middleware().

Файл web.php

<?php

Route::group([
    'middleware' => 'admin'
],function (){
});
Route::get('/', 'HomeController@index');
Route::get('/post/{slug}','HomeController@show')->name('post.show');
Route::get('/tag/{slug}','HomeController@tag')->name('tag.show');
Route::get('/category/{slug}','HomeController@category')->name('category.show');
Route::post('/subscribe','SubsController@subscribe');
Route::get('/verify/{token}', 'SubsController@verify');
Route::group(['middleware' => 'auth'],function (){
    Route::get('/logout', 'AuthController@logout');
    Route::get('/profile', 'ProfileController@index');
    Route::post('/profile','ProfileController@store');
    Route::post('/comment','CommentsController@store');
});
Route::group(['middleware' => 'guest'],function (){
    Route::get('/register','AuthController@registerForm');
    Route::post('/register', 'AuthController@register');
    Route::get('/login','AuthController@loginForm')->name('login');
    Route::post('/login','AuthController@login');
});
Route::group(['prefix'=>'admin','namespace'=>'Admin', 'middleware' => 'admin'], function()
{
    Route::get('/', 'DashboardController@index');
    Route::resource('/categories', 'CategoriesController');
    Route::resource('/tags', 'TagsController');
    Route::resource('/users', 'UsersController');
    Route::resource('/posts', 'PostsController');
    Route::get('/comments','CommentsController@index')->name('comments.index');
    Route::get('/comments/toggle/{id}', 'CommentsController@toggle');
    Route::delete('/comments/{id}/destroy', 'CommentsController@destroy')->name('comments.destroy');
    Route::resource('/subscribers', 'SubscribersController');
});

Файл Kernel.php

<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
    protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
             \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class
    ];
}

Файл AdminMiddleware.php

<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::user()->is_admin)
        {
            return $next($request);
        }
        abort(404);
    }
}

Скриншот из PhpStorm https://vk.com/id155276665?z=photo155276665_456240292%2Falbum155276665_00%2Frev

Answer 1

Во первых, исправьте web.php. У вас там пустая функция в начале.Зарегистрируйте посредник в массиве middleware файла kernel.php.

protected $middleware =[
    ...
    \App\Http\Middleware\AdminMiddleware::class,
    ...];
READ ALSO
Как передать данные в файл php?

Как передать данные в файл php?

Доброго времени суток

139
Как загрузить контент если перешли по определенному табу (tab)?

Как загрузить контент если перешли по определенному табу (tab)?

Есть страница https://sitecom/zapis/ как загрузить определенный контент например: echo 'Yes'; если перешли на #tab3 https://site

124
вывести значение переменной на экран

вывести значение переменной на экран

Задача: вывести значение переменной на экранКак сделать? Вот что я написал пока

148
Считать строку с латинскими буквами из файла

Считать строку с латинскими буквами из файла

Нужно открыть файл и считать из него только строку с латинскими буквами и вывести ееНе знаю как задать условие, что бы считывалась только...

158