Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉维优先路由_Php_Laravel - Fatal编程技术网

Php 拉维优先路由

Php 拉维优先路由,php,laravel,Php,Laravel,我试图为数据库中的每个用户提供一个唯一的URL,而不是mysite.com/profile/1,例如: mysite.com/my-cool-user --> usersController@show mysite.com/my-other-user --> userController@show 但是,如果它没有像我的酷用户那样成功,它将继续检查其他路径 这可能吗?是的,它将失败,您可以使用路由参数 Route::get('/{user-name}','userControlle

我试图为数据库中的每个用户提供一个唯一的URL,而不是mysite.com/profile/1,例如:

mysite.com/my-cool-user --> usersController@show
mysite.com/my-other-user --> userController@show
但是,如果它没有像我的酷用户那样成功,它将继续检查其他路径


这可能吗?

是的,它将失败,您可以使用路由参数

Route::get('/{user-name}','userController@show');
然后在控制器方法中向该方法添加一个参数

public function userController($userName){

// find the user by new username

User::where('username',$userName)->first();

}
{user name}可以是任何用户名,如果数据库中的名称匹配,您将获得用户配置文件

在Laravel for routing中,Routes.php中首先出现的语句将在该特定语句下面的其他语句之前进行处理。因此,如果您有两个相同的URL,那么将始终使用第一个URL


文档。

我不知道如何才能完全使用它,但如果您只有一条基于数据库的路由,则可以创建这样的绑定规则:

Route::bind('username', function ($value, $route) {
    return User::where('name', $value)->first();
});
现在,在所有管线的末端创建以下管线:

并定义您的显示功能:

public function test($username  = null) {

    var_dump($username);
}

在上面,若$username为null或显示404页面,则可以重定向到主url。但是,当您有许多基于数据库的路由,并且所有路由都具有相同的模式且没有任何前缀时,它仍然无法解决问题。

但是如果我将该规则放在第一位,这难道不会使我拥有的所有其他规则都无用吗?例如,我有一个关于页面的静态路由…明白了!刚刚放置了'Route::get'/{username}','userController@show';' 在routes.php的末尾,它可以工作;-谢谢是的,它将从数据库中查找关于页面用户的信息,如果它存在,它将为您获取一个用户,如果不存在,它将失败。您可以将此路线放置在其他路线的下方。
public function test($username  = null) {

    var_dump($username);
}