Laravel 3 - 以同步方式设置路由

时间:2013-06-25 01:52:27

标签: laravel laravel-3

我使用Laravel 3和两组登录控制器 - 主域名登录,所有子域名都应该路由到portal / login @ index

我在routes.php中使用以下代码:

Route::filter('before', function()
{
   $server = explode('.', Request::server('HTTP_HOST'));
   if (count($server) == 3)
   {
      $account = Account::where('subdomain', '=', $server[0])->first();
      Session::put('account_id', $account->id);
      Route::get('login', 'portal.login@index');
      Route::post('login', 'portal.login@index');
      Route::get('logout/(:any)', 'portal.login@logout');
   }
   else
   {
     // some other stuff - no routing calls in here
   }
 }

此代码适用于捕获子域和&执行其他任务(例如设置$ account_id),但似乎对路由没有影响

test.mydomain.com/login应该转到portal / login,而是转到主登录控制器。

我已经搜索过以确保没有影响此功能的过滤器(它是一个继承的应用)

这是设置此方法的正确方法吗?如果是这样,还有什么可能影响到这个?

TIA!

1 个答案:

答案 0 :(得分:0)

这是因为当你在里面时

if (count($server) == 3)
{
    // Here
}

使用get/post注册新路由不会响应,因为系统已完成路由匹配,在这种情况下,您可以使用

将请求转发到新路由
Route::forward($method, $uri);

哪个在laravel/routing/route.php文件中给出了nelow

/**
 * Calls the specified route and returns its response.
 *
 * @param  string    $method
 * @param  string    $uri
 * @return Response
 */
public static function forward($method, $uri)
{
    return Router::route(strtoupper($method), $uri)->call();
}

因此,如果您要创建类似于Route::get('login', 'portal.login@index');的请求,那么您可以将其作为

路线::前进('GET','登录'); 在这种情况下,您通常只需注册路线即可注册此路线。因此,在routes.php中注册/添加要动态创建的请求,并在

中使用Route::forward()方法
if (count($server) == 3)
{
    Route::forward('GET', 'login'); // for a get request
    Route::forward('POST', 'login'); // for a post request
}

就是这样。