Laravel 5.1命名路由解析,子域不起作用

时间:2015-08-05 00:42:20

标签: php routes laravel-5.1

感谢您提供的任何帮助。我学习Laravel 5.1已经10天了,所以对我错过的任何建议都将不胜感激!

我在Laravel 5.1中解决命名路由时遇到问题。我正在构建一个应用,其网址格式为{organisation}.website.com,其中{organisation}是在客户注册时定义的。

使用样本子域时,代码路由完美,只要我对路由地址进行硬编码(例如:redirect('/home');),但是当我尝试通过来自Controller的命名路由进行路由时(例如:redirect()->route('session.create');)路线解决方式如下:

http://%7Borganisation%7D.website.com/home

我的路线看起来像这样:

<?php

/**
 * Entity routes - resolves {organisation}.website.com
 */
Route::group([
        'domain' => '{organisation}.' . env('APP_DOMAIN')
    ], function(){

    /*
    |----------------------------------------------------------------------
    | Freely available routes for login, registration, password reset etc
    |----------------------------------------------------------------------
    */
    Route::group([
        'middleware' => 'guest'
    ], function(){

        // Login
        Route::get('login', ['uses' => 'SessionController@create', 'as' => 'session.create']);
        Route::post('login', ['uses' => 'SessionController@store', 'as' => 'session.check']);

    });

    Route::group([
        'namespace' => 'Website',
        'middleware' => ['authorise'],
    ], function(){


    });

    /*
    |-----------------------------------------------------------------------
    | Potentially secured routes
    |-----------------------------------------------------------------------
    */
    Route::group([
        'middleware' => ['authorise']
    ], function(){

        // Logout and destroy all Auth data
        Route::get('logout', ['uses' => 'SessionController@destroy', 'as' => 'session.destroy']);

    });
});

在我的控制器中,我这样称呼路由:

return redirect()
    ->route('session.create')
    ->withInput($request->only('email', 'remember'))
    ->withErrors([
        'email' => $this->getFailedLoginMessage(),
    ]);

并且它成功完成,但使用上面的URL和404.如果我改为这样,它可以很好地工作。

return redirect('/home')
    ->withInput($request->only('email', 'remember'))
    ->withErrors([
        'email' => $this->getFailedLoginMessage(),
    ]);

我在组织子域中设置什么以使命名路由有效?谢谢!

1 个答案:

答案 0 :(得分:0)

搞定了。下面是我如何修复问题,基本上我必须动态绑定到子域的slug路径。希望这有助于某人!

我首先必须将Organisation类传递给我的控制器方法并更改路由调用,如下所示:

public function destroy(Organisation $organisation)
    {
        Auth::logout();

        return redirect()->route('session.create', ['organisation' => $organisation->slug]);
    }