0

我想了解如何以最佳方式设置路线,以免将来发生冲突。

我想首先分割用户的用户名,显示该用户的个人资料。

示例:laravel.dev/user1

问题是,如果我有一条名为 register “example below” 的路由,并且用户输入的用户名 register 当然会发生冲突,并且不确定显示的是哪个视图。

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。

有什么帮助吗?

4

1 回答 1

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/ 。

于 2014-01-19T20:42:32.540 回答