1

我正在使用带有两组登录控制器的 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,而是转到主登录控制器。

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

这是设置它的正确方法吗?如果是,还有什么可能会影响它?

蒂亚!

4

1 回答 1

0

这是因为当你在里面

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

新路由的注册使用get/post不会响应,因为系统已经完成了路由匹配,在这种情况下,您可以将请求转发到新路由使用

Route::forward($method, $uri);

这是在laravel/routing/route.php文件中,如下所示

/**
 * 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');then 的请求,你可以这样做

Route::forward('GET', 'login'); 在这种情况下,您已经注册了这条路线,就像您注册一条路线一样。routes.php因此,在要动态创建的请求中注册/添加请求并在其中使用Route::forward()方法

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

而已。

于 2013-06-25T02:35:33.710 回答