主页/PHP笔记/PHP问答/框架Laravel/如何在 Laravel 中获取当前路由

如何在 Laravel 中获取当前路由

Bug编译狮

Bug编译狮

在 Laravel 中,你可以通过多种方式来获取当前的路由信息。以下是几种常见的方法:

1. 使用 Route::current() 方法

Route::current() 是 Laravel 提供的一个静态方法,用于返回当前请求的路由实例。

$currentRoute = Route::current();

2. 使用 request()->route() 方法

如果你在一个控制器的方法中,可以直接使用 request()->route() 来获取当前请求的路由实例。

public function someMethod()
{
    $currentRoute = request()->route();
}

3. 使用 Route::currentRouteName() 方法

Route::currentRouteName() 方法用于返回当前请求的路由名称。

$currentRouteName = Route::currentRouteName();

示例代码

以下是一个完整的示例,展示了如何在控制器中获取当前路由的信息:

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesRoute;

class ExampleController extends Controller
{
    public function someMethod()
    {
        // 获取当前路由实例
        $currentRoute = Route::current();

        // 获取当前路由名称
        $currentRouteName = Route::currentRouteName();

        // 输出当前路由和路由名称
        echo "Current Route: " . $currentRoute->uri() . "n";
        echo "Current Route Name: " . $currentRouteName . "n";

        // 如果需要访问参数,可以使用 $request->route('param_name')
        $parameter = request()->route('param_name');
        echo "Parameter: " . $parameter . "n";
    }
}

在这个示例中,我们首先获取了当前请求的路由实例,并输出了其 URI 和名称。然后,我们还展示了如何从当前路由中提取参数。

希望这些信息对你有帮助!

黑板Bug讲师

黑板Bug讲师

介绍

在使用Laravel框架构建应用时,确定当前路由非常重要,尤其是在依赖于路由属性的功能上,例如中间件、访问控制或动态设置导航栏中的活跃状态等。了解如何获取当前路由信息对于有效和动态的Laravel应用程序开发至关重要。

在Laravel中,路由信息由路由控制器处理。Route装饰器(facade)提供了与应用路由交互的多种方法。在本教程中,我们将探索各种获取当前路由的方法并在您的应用程序中利用这些路由。

正在访问当前路由。

首先,你可以通过使用当前路线来访问它。current提供的方法由您提供。Route装饰器。这是它的用法:

use IlluminateSupportFacadesRoute;

// Get the current route
$route = Route::current();

这将返回当前路由的实例,你可以使用它来提取进一步的信息。

获取路线名称

Laravel 允许路由命名,以便于方便的引用。要获取当前路由的名字,你可以使用以下代码:currentRouteName方法:

// Get the name of the current route
$routeName = Route::currentRouteName();

如果需要在视图或中间件中对当前路线的名称进行检查,你可以这样做:

if (Route::currentRouteName() === 'home') {
    // Do something specific for the home route
}

获取URL和路由参数

除了名称,您还可以检索路线的URL或任何通过URL传递的参数。您可以使用以下方法来完成此操作:currentRouteActionand 是“并且”的意思。current这些方法的参数分别为:

// Get the full URL to the current route
$currentUrl = url(Route::current()->uri());

// Get the current route parameters
$routeParameters = Route::current()->parameters();

这些参数通常是在路由的URL中定义的,例如:

Route::get('/user/{id}', function ($id) {
    // Your logic here
})->name('user.show');

在上述路线中,有一个参数。{id}那你可以通过某种方式获取的。parameters方法。

使用Route Facade的辅助函数。

Laravel 提供了多个可以直接使用的助手函数,而不是调用方法。RouteFacade. 以下是一些例子:

// Using the helper function to get the current route
$route = request()->route();

// Getting the current route name
$routeName = request()->route()->getName();

// Getting current route action
$routeAction = request()->route()->getActionName();

// Getting route parameters values
$userId = request()->route('id');

对不起,您的问题不明确,请您重新描述一下。request()该功能提供了一种方便的方式来访问当前请求信息,包括路由。

基于路由模式的条件检查

有时,您可能希望根据路由名称遵循的模式执行操作。您可以使用以下代码来实现这一点:is方法如下:

// Check if the route name matches a pattern
if (Route::is('admin.*')) {
    // The route name starts with 'admin.'
}

这在根据网站的某一部分设置活动状态方面尤其有用。

中间件和路由信息

在中间件中,访问当前路由是一项常见的任务。中间件方法可以访问到$request对象,从而可以给你路线:

public function handle($request, Closure $next)
{
    $currentRoute = $request->route();
    // Your logic here

    return $next($request);
}

这允许你在中间件内基于路线执行验证或修改操作。

在视图中显示路由信息

为了在导航元素或面包屑条的视图中显示当前路线信息,可以直接使用。Route请提供需要翻译的内容。

<ul>
    <li class="{{ Route::is('home') ? 'active' : '' }}">Home</li>
    <li class="{{ Route::is('about') ? 'active' : '' }}">About</li>
    <li class="{{ Route::is('contact') ? 'active' : '' }}">Contact</li>
</ul>

检查活跃的路由可以用来在应用程序的UI内创建动态用户体验。

结论

理解如何在Laravel中获取当前路由及其属性对于构建动态和响应式应用程序至关重要。本教程介绍了Laravel框架提供的各种方法,以访问和操作路由信息,以满足您的应用需求。通过利用Laravel的强大路由功能,包括命名路由和中间件,开发人员可以更高效地控制应用程序的流程和逻辑。

现在您已经学会了如何获取当前的路由信息,可以在您的Laravel应用中实验使用这些方法来优化控制器、视图和中间件。这将帮助您的应用程序变得更加了解并响应用户执行的动作。

长工码奴1523

长工码奴1523

要在 Laravel 中获取当前路由,你可以使用以下方法:

首先,确保你在项目中安装了 Laravel。然后,打开 app/Http/Middleware/VerifyCsrfToken.php 文件。

在这个文件中,找到并修改 $this->routeMiddleware 数组中的第一个元素(即默认的验证 CSRF 的中间件)。将该中间件替换为一个自定义的中间件,用于获取当前路由信息。

$this->routeMiddleware([
    // ...其他中间件...
    'verify-current-route' => AppHttpMiddlewareVerifyCurrentRoute::class,
]);

接下来,创建一个新的中间件类,例如 GetCurrentRouteMiddleware.php

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesRoute;

class GetCurrentRouteMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 获取当前路由
        $currentRoute = Route::getCurrentRoute();

        return $next($request);
    }
}

现在,你需要在控制器或其他需要处理请求的地方添加这个新的中间件。例如,在 AppHttpControllersController.php 中添加如下代码:

protected function dispatch(Request $request)
{
    // 在这里调用您的逻辑
    // ...

    // 添加当前路由到响应
    $response = $this->handleResponse(...);

    // 返回响应
    return response()->json($response, 200);
}

protected function handleResponse(array $response)
{
    // 在这里处理响应数据
    // ...

    // 获取当前路由
    $currentRoute = Route::getCurrentRoute();
    if ($currentRoute) {
        // 如果有当前路由,则添加到响应
        $response['current_route'] = $currentRoute->uri();
    }

    return $response;
}

最后,要启用这个中间件,请在 config/app.php 文件中添加以下配置:

'middlewares' => [
    // ...
    'verify-current-route' => true,
],

这样,当用户访问任何页面时,Laravel 将会自动检查当前路由,并将其添加到响应中。