[英]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.