【问题标题】:Laravel resource controllers for both API and non-API use用于 API 和非 API 的 Laravel 资源控制器
【发布时间】:2013-07-27 15:48:38
【问题描述】:

在为同样对 API 进行 AJAX 调用的网站创建资源控制器 PhotosController 后,资源控制器似乎既可用于普通网站,也可用作 API。

这将为Photo 显示一个 id = 1 的 HTML 页面

http://domain.com/photos/1

而 Javascript 使用以下内容更新 Photo 资源并返回 JSON 响应

PUT http://domain.com/api/v1/photos/1

问题:我们是否有 2 个PhotoControllers,一个用于处理 API 使用,一个用于非 API?

【问题讨论】:

    标签: php laravel laravel-4 restful-url


    【解决方案1】:

    没有。您可以让两个单独的路由指向同一个控制器和操作。

    Route::get('/photos/1', 'PhotoController@index');
    Route::get('/api/v1/photos/1', 'PhotoController@index');
    

    然后,在您的控制器方法中,您可以测试请求是否来自 Ajax。

    if (Request::ajax()) {
        // Do some crazy Ajax thing
    }
    

    【讨论】:

    • 为什么要包含域?对我来说,这是一个 DRY 问题,而且有点不必要......
    • 你不会想要的。我改变了编辑我的答案。感谢您指出这一点,@Mike Anthony
    【解决方案2】:

    我使用带前缀的路由组进行 API 调用:

    Route::resource('venue', 'VenueController');
    
    Route::group(array('prefix' => 'api'), function(){
        Route::resource('venue', 'VenueController', array('only' => array('index', 'show')));
    });
    

    然后,在控制器中,我使用这个条件:

    if (Route::getCurrentRoute()->getPrefix() == 'api') {
        return Response::json($venues->toArray());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2020-03-23
      • 1970-01-01
      相关资源
      最近更新 更多