有时,我们需要在我们的 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','.+');
});
发表评论 取消回复