繁体   English   中英

Laravel 5.2路由正则表达式

[英]Laravel 5.2 route regex

我正在尝试使用以下路由来捕获网址,例如www.example.com/@username,但这给了我404错误。

Route::get('{user}', 'UserController@showProfile')->where('user', '(?<=\s|^)@([\w@]+)');

正则表达式工作得很好,因为如果我使用以下路线,它将输出正确的结果。

Route::get('{user}', 'UserController@showProfile')

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class UserController extends Controller
{
    public function showProfile($user)
    {
        $out = array();
        $re = "/(?<=\\s|^)@([\\w@]+)/";

        preg_match_all($re, $user, $out);

        dd($out);
    }
}

我究竟做错了什么?

从路由正则表达式中删除后视和捕获组。 尝试使用最简单的解决方案,例如^@[\\w]+$ 而且由于您的路线将始终以@开头而不是捕获用户名,因此可以执行$user = substr($user, 1);

我也建议您使用路由模型绑定,这样您就可以直接在控制器中拥有一个现有用户的实例。 在您的RouteServiceProvider @ boot中添加以下内容:

    $router->bind( 'user', function ( $username ) {
        return User::whereUsername( substr($username, 1) )->firstOrFail();
    });

然后在您的控制器内部,您的方法将如下所示:

public function showProfile( User $user ){ ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM