【问题标题】:Laravel 3 - set routes dyncamicallyLaravel 3 - 动态设置路由
【发布时间】:2013-06-21 16:39:55
【问题描述】:

我使用 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!

【问题讨论】:

    标签: laravel laravel-3


    【解决方案1】:

    因为当你在里面

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

    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
    }
    

    就是这样。

    【讨论】:

    • 谢谢,我会看看的。但是,我不相信这是因为它在 count($server); 内。这是因为它在前置过滤器中。我将其移至正常路由并正常工作。不过,您的回答似乎基本上是正确的 - 我会调查并让您知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多