我如何获得资源存储路线 laravel

Posted

技术标签:

【中文标题】我如何获得资源存储路线 laravel【英文标题】:How can i get resource store route 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() 为空

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

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

谢谢。

【问题讨论】:

【参考方案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)

以上是关于我如何获得资源存储路线 laravel的主要内容,如果未能解决你的问题,请参考以下文章

我如何以正确的方式获得活动路线?

如何在 Laravel 8 上获得正确的路线

如何在android编程中获得两个地理点之间的精确路线

访问任何子路线时如何在父路线链接上获得活动课程?

如何确保烧瓶应用程序已在所有路线上获得授权?

如何在两个位置之间获得多条路线?