NotFoundHttpException в промежуточном программном обеспечении и контроллере Laravel - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в laravel и изучаю основы с https://www.tutorialspoint.com/laravel/laravel_middleware.htm

После установки я создал RoleMiddleware и TestController.

RoleMiddleware.php

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next, $role)
{
    echo "Role: ".$role;
    return $next($request);
}
}

и TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
//
public function index(){
  echo "<br>Test Controller.";
}
}

и app \ http \ rout.php

 Route::get('/role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
 ]);

и Kernel.php

protected $routeMiddleware = [
  'auth' => \App\Http\Middleware\Authenticate::class,
  'auth.basic' => \Illuminate\Auth\Middleware   \AuthenticateWithBasicAuth::class,
  'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
  'Age' => \App\Http\Middleware\AgeMiddleware::class,
  'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
  'Role' => \App\Http\Middleware\RoleMiddleware::class,
  'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
  ];

После написания всего этого кода я выполнил это, используя http://localhost:8000/role, но это дает исключение NotFoundHttpException. Пожалуйста, помогите мне решить эту проблему ..

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Прежде всего вы используете более старую версию Laravel, так как ваши маршруты перечислены в файле app \ http \ rout.php, потому что в более новых версиях это на самом деле rout \ web.php файл:

Тогда вы допустили ошибку в своем маршруте:

 Route::get('/role', ['middleware' => 'Role:editor', 'uses' => ]);

http-маршруты должны иметь обратный вызов / закрытие, будь то пользовательская функция или использование контроллера ... Попробуйте использовать следующие основные параметры:

Route::get('/role', function() { return "Working"; });

Также проверьте, не указан ли ваш маршрут в качестве исключенного маршрута

Если это работает, то играйте с промежуточным ПО !!!

0 голосов
/ 27 июня 2018

Я не могу отправить комментарий, чтобы попросить об ошибке дыры (bcs моей репутации) но я пишу промежуточную посуду таким образом. может быть, это поможет вам:

сначала убедитесь, что $ role является строкой, или поместите ее в json_encode (на RoleMiddleware.php) ==> echo "Role:" .json_encode ($ role);

, затем измените ваш маршрут ниже: Route :: get ('/ role', 'TestController @ index') -> middleware ('Role');

пришлите мне результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...