2

我正在寻找一种简单的方法来获取我现有的 Laravel 4 控制器和模型,并让它们在访问时返回一个 json 对象响应 - “api.myapp.com”。

是否有可用于指定子域请求的路由过滤器?

4

2 回答 2

2

我发现问题在于两件事:1)我忘记更新本地主机文件以正确解析子域。2) Laravel 4 Route::resource 实例不能在多个 Route::group() 中复用。

我发现在不同子域上引用相同资源路由的唯一方法是手动指定每个 RESTful 路由并为每个资源创建一个新控制器。Jeffery Way 有一个很好的 sublime 片段来加速这个。片段在这里。

注意每个复制的控制器之前的“Api..”,它在我的控制器目录中命名相同。

Route::group(array('domain' => 'www.myapp.com'), function()
{
    Route::resource('projects', 'ProjectsController');
});

Route::group(array('domain' => 'api.myapp.com'), function()
{

/ Resource API
// project API Resource
    Route::get('projects', array('as' => 'projects', 'uses' => 'ApiProjectsController@index'));
    Route::get('projects/{id}', array('as' => 'project', 'uses' => 'ApiProjectsController@show'));
    Route::get('projects/new', array('as' => 'new_project', 'uses' => 'ApiProjectsController@new'));
    Route::get('projects/{id}/edit', array('as' => 'edit_project', 'uses' => 'ApiProjectsController@edit'));
    Route::post('projects', 'ApiProjectsController@create');
    Route::put('projects/{id}', 'ApiProjectsController@update');
    Route::delete('projects/{id}', 'ApiProjectsController@destroy');
});

下一步是在 ApiProjectController RESTful 方法中调用适当的响应。

于 2013-03-08T02:21:50.210 回答
1

只需使用前置过滤器 - 并检查“api”子域。像这样的东西

Route::filter('before', function()
{
    $server = explode('.', Request::server('HTTP_HOST'));
    if ($server[0] === 'api')
    {
         // Api subdomain request - do JSON
    }
    else
    {
         // Route normal
    }
}
于 2013-03-06T11:23:22.273 回答