簡體   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