有时,我们需要在我们的 Laravel 应用程序中添加多个路由。在这里,我们将创建动态路由,以便我们可以使用尽可能多的参数。

首先在你的路由文件中添加下面给出的代码。我们使用的是 laravel 5.5,所以我们的路由文件是路由目录下的 web.php

Route::get('{slug?}', 'UriController')->name('page_url')->where('slug','.+');

现在在你的控制器目录下创建一个控制器文件 UriController.php 并添加下面给出的代码

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\DB;

class UriController extends Controller
{
    /**
     * Show the page for the given slug.
     *
     * @param  string  $request uri
     * @return Response
     */
    public function __invoke(Request $request)
    {

        $request_path = $request->path();

        $request_path_array = explode('/', $request_path);

    }


}

代码说明

我们在路由中添加了一个参数 {slug?} 并添加了 where 条件。因此,我们可以动态添加尽可能多的参数。您还可以在 where 条件中添加任何正则表达式。现在您的网址将如下所示https://example.com/parameter1/parameter2等等

我们在路由中使用了 name 方法来通过刀片模板或控制器中的 name 访问路由,如下所示

route('page_url',['slug' => 'abc/123']);

这里我们创建了一个 Single Action Controller UriController 并在我们的 __invoke 方法中获取 uri

在我们的请求方法中,我们有 $request_path_array。因此,我们可以遍历传入 url 的动态参数。

如果您不想将特定的 uri 应用于上面的路线,那么您可以使用下面给出的代码,该代码使用路线中除 api 之外的所有路线

Route::get('{slug?}', 'UriController')->name('page_url')->where('slug','^(?!api).*$');

如果您想为路由添加前缀,则可以使用下面给出的代码。现在您的网址将如下所示https://example.com/your-prefix/parameter1/parameter2

Route::prefix('your-prefix')->group(function () {

    Route::get('{slug?}', 'UriController')->name('page_url')->where('slug','.+');

});
点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部