我正在寻找一种简单的方法来获取我现有的Laravel 4控制器和模型,让他们在访问时返回一个json对象响应 - “api.myapp.com”。
我是否可以使用指定子域请求的路由过滤器?
答案 0 :(得分:2)
我发现问题是两件事: 1)我忘记更新我的本地主机文件以正确解析子域。 2)Laravel 4 Route :: resource实例不能在多个Route :: group()中重用。
我发现在不同子域上引用相同资源路由的唯一方法是手动指定每个RESTful路由并为每个资源创建一个新控制器。 Jeffery Way有一个很好的崇高片段来加速这个。 Snippet here.
注意" 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方法中调用适当的响应。
答案 1 :(得分:1)
只需使用之前的过滤器 - 并检查'api'子域。像这样的东西
Route::filter('before', function()
{
$server = explode('.', Request::server('HTTP_HOST'));
if ($server[0] === 'api')
{
// Api subdomain request - do JSON
}
else
{
// Route normal
}
}