如何在Laravel中为这种情况创建一条路线?

时间:2017-03-12 17:36:33

标签: laravel routing

基本思想是像子域架构一样工作,但用户帐户将来自网站的名称。

我有一个名为 myService.com 的网络服务。 我会有像Paul,Anne,Jhon这样的用户。 我希望Laravel能够为Paul,Anne和Jhon创建这样的主页:

  1. myService.com / Paul =>应该重定向到保罗主页
  2. myService.com / Anne =>应重定向到安妮主页
  3. myService.com / Jhon =>应该重定向到Jhon主页
  4. myService.com 也有自己的主页和其他网页。我喜欢这个:

    Route::get('/', function () {
        return view('home');//myService.com HOME page
    });
    
    Route::group(['prefix'=>'videos'], function (){
    
        Route::get('/', function () {
            return "all videos";
        });
        Route::get('/{id}', function ($id) {
            return "Video => $id";
        });
    
    });
    
    Route::group(['prefix'=>'articles'], function (){
    
            Route::get('/', function () {
                return "all articles";
            });
            Route::get('/{id}', function ($id) {
                return "Article => $id";
            });
     });
    

    对于用户,我将拥有几乎相同的URL结构:

    myService.com/Paul
    myService.com/Paul/videos
    myService.com/Paul/videos/id
    myService.com/Paul/articles
    myService.com/Paul/articles/id
    
    myService.com/Paul2
    myService.com/Paul2/videos
    myService.com/Paul2/videos/id
    myService.com/Paul2/articles
    myService.com/Paul2/articles/id
    

    由于我将拥有无限制的用户帐户,因此我不知道如何为此方案设计路径结构。

    它应该是这样的吗?

    Route::group(['prefix'=>'account'], function (){
    
        Route::get('/', function ($account) {
            return "user $account home page";//Ex myService.com/Paul
        });
    
        Route::group(['prefix'=>'videos'], function (){
            Route::get('/', function () {
               return "user account - all videos";//Ex myService.com/Paul/videos
            });
    
            Route::get('/{id}', function ($id) {
               return "user account video => $id";//Ex myService.com/Paul/videos/id
            });
        });
    
        Route::group(['prefix'=>'articles'], function (){
            Route::get('/', function () {
               return "user account - all articles";//Ex myService.com/Paul/articles
            });
    
            Route::get('/{id}', function ($id) {
               return "user account articles => $id";//Ex myService.com/Paul/articles/id
            });
        });
    
    });
    

    这是我到目前为止所做的,但我不知道这是不是一个好方法。这是对的吗?

1 个答案:

答案 0 :(得分:2)

在路线末尾定义该组,以便其他路线具有优先权。然后你可以使用slug作为用户名(或你正在使用的任何东西)

Route::group(['prefix' => '{username}'], function(){
    Route::group(['prefix' => 'videos'], function(){
        ...
    });
});

但是这个群体更有可能尝试拿起你所有的404。也许你可以添加额外的约束

Route::group(['prefix' => '{username}'], function(){
    ...
})->where('username', '[A-Za-z]+');