Laravel 4 Route在第一段上使用用户名

时间:2013-12-18 12:39:07

标签: php laravel laravel-4 laravel-routing

我想不知道如何设置我的路线,以便在未来不会受到影响。

我想首先看一下显示该用户个人资料的用户的用户名。

示例:laravel.dev/user1

问题是,如果我有一个带有名称寄存器的路线"以下示例"并且用户输入像用户名寄存器当然会发生冲突,并且不确定是否显示了视图。

Route::get('register','UserController@getCreate');

我设置我的主要路线以显示个人资料用户:

    Route::get('{cr_user}','WallController@getIndex');    // view profile

    Route::bind('cr_user', function($value, $route) {
    if($user = User::where('username', '=',$value)->first()) // check if exist the user other ways show 404 page
    {
        return $user;
    }
    App::abort(404);
});

这种路线设置的第二个问题是我不能只用1段设置其他路线。例如,如果我想设置路由寄存器,我不能在没有放任何段之前做到这一点但为了做它的工作我必须把例子:do / register。

任何帮助?

1 个答案:

答案 0 :(得分:1)

以下是我认为您可以达到预期效果的方式。虽然它不是完全证明,但我认为它会起作用(我还没有测试过)。也像Anam说你想把这条路线放在页面的底部。

基本上,您可以通过以下方式获取当前在Laravel App中的路线列表:

<?php
$routes = Route::getRoutes();
foreach ($routes as $r) {
    $route_names = array();
    $firstSegment = explode('/', $r->getPath());
    //echo $firstSegment[0] ."<br>";
    array_push($route_names, $firstSegment[0]);
    var_dump($route_names);
}
 ?>

您现在有一个数组或路由URL的第一个段。当用户注册您的应用程序时使用这些作为保留字,如果匹配则抛出错误。这样可以防止碰撞。但这不会阻止您使用已存在的用户名创建新路由,因此在添加新路由之前搜索您的数据库:)

我很确定可能有一个很好的解决方案,但这是我想到的。我不喜欢添加/ profile /只是不优雅。