【问题标题】:How can i get resource store route laravel我如何获得资源存储路线 laravel
【发布时间】:2019-05-03 09:36:21
【问题描述】:

我的添加表单代码

<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() 为空

现在我希望控制器名称和方法名称在此处动态显示所有其他路由都可以正常工作,但找不到存储路由

你能指导我在哪里出错吗?

谢谢。

【问题讨论】:

    标签: laravel laravel-routing laravel-5.7


    【解决方案1】:

    我使用 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  
    

    【讨论】:

    • Route::current() 为空
    • @BhargavPatel,我已经添加了整个中间件,现在检查您的代码。您可能正在使用不同的课程
    • @BhargavPatel,这是在 laravel 5.7 上开发和测试的
    【解决方案2】:

    我想这就是你要找的......

    How to get name of requested controller and action in middleware Laravel

    仅供参考,您不应该像在您的示例中那样使用硬代码设置 _token,而是使用 Form::open(),因为这会在每次加载页面时为您设置 _token。这是一种确保 _token 不能被强制使用的更安全的方法,而硬编码版本显然会为所有用户每次都将 _token 设置为相同的值。

    【讨论】:

    • 为了显示完整的表格,我写了令牌,但我使用了你所说的令牌。我会检查并回复你。
    • 我看到了您的参考网址,但它不起作用。 $controller = class_basename(Route::current()); dd($controller); 返回 null
    • 上面发布的链接从 Route::current() 对象返回属性 CONTROLLER。请尝试复制适合您使用的 Laravel 版本的代码。对于 5.6,它将是 class_basename(Route::current()->controller)
    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2021-07-04
    • 2022-07-19
    相关资源
    最近更新 更多