Как я могу получить маршрут хранилища ресурсов laravel

Мой код формы добавления

<form method="post" name="m_form" action="{{url('post')}}">
    <input type="hidden" name="_method" value="POST">
    <input type="hidden" name="_token" value="zL9O2D3H70fkSrt9vziwbkf2bHBqi6O6NKk1QgQK">
    <input type="text" required="" name="name" id="name" class="form-control m-input" >
    <input type="submit" name="submit" value="submit">
<form>

Мой маршрут

Route::resource('post', 'PostController');

Промежуточное ПО

public function handle($request, Closure $next)
{
    $nextRequest = $next($request);
    dd($request->route()->getAction());
}

Теперь в промежуточном ПО $ request-> route () -> getAction () имеет значение null

Теперь я хочу, чтобы имя контроллера и имя метода динамически работали здесь, все остальные маршруты работали нормально, но маршрут сохранения не найден.

Не могли бы вы указать мне, где я могу ошибиться?

Спасибо.


person Bhargav Patel    schedule 01.12.2018    source источник


Ответы (2)


Я использовал Laravel Log Class для записи значений в файл журнала (/storage/logs/filename.log) для просмотра вывода.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;

class CheckControllerAction
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $action = Route::current()->action;
        $route = $action['uses'];
        $controllerAction = explode("@", $route);

        Log::info(class_basename($controllerAction[0]));
        Log::info($controllerAction[1]);
        Log::info(class_basename(Route::current()->controller));
        return $next($request);
    }
}

Вывод в файле журнала:

[2018-12-04 21:34:41] local.INFO: PostController  
[2018-12-04 21:34:41] local.INFO: create  
[2018-12-04 21:34:41] local.INFO: PostController  
person Rafay Hassan    schedule 02.12.2018
comment
Route::current() имеет значение null - person Bhargav Patel; 04.12.2018
comment
@BhargavPatel, я добавил все промежуточное ПО и теперь проверяю ваш код. вы можете использовать другой класс - person Rafay Hassan; 05.12.2018
comment
@BhargavPatel, это разработано и протестировано на laravel 5.7 - person Rafay Hassan; 07.12.2018

Я думаю, это то, что вы ищете ...

Как получить имя запрошенного контроллера и действие в промежуточном программном обеспечении Laravel

И просто к сведению, вы не должны устанавливать _token с помощью жесткого кода, как в вашем примере, а с помощью Form :: open (), поскольку это устанавливает _token для вас каждый раз при загрузке страницы. Это гораздо более безопасный способ гарантировать, что _token не может быть принудительно применен, в отличие от вашей жестко закодированной версии, которая, очевидно, будет устанавливать _token на одно и то же значение для всех пользователей каждый раз.

person absolute    schedule 01.12.2018
comment
Для отображения полной формы я пишу токен, но я использую токен, как вы сказали. Я проверю и свяжусь с вами. - person Bhargav Patel; 01.12.2018
comment
Я вижу ваш ссылочный URL, но он не работает. $controller = class_basename(Route::current()); dd($controller); возвращается ноль - person Bhargav Patel; 01.12.2018
comment
Приведенная выше ссылка возвращает свойство CONTROLLER из объекта Route :: current (). Пожалуйста, попробуйте скопировать код, соответствующий используемой вами версии Laravel. Для 5.6 это будет class_basename (Route :: current () - ›контроллер) - person absolute; 14.12.2018