php - 如何为 Web 客户端和 native 移动应用程序设计 Laravel 5.1 应用程序

标签 php laravel design-patterns laravel-5 laravel-5.1

我想为 Web 和 api 为移动应用程序制作一个 Laravel 5.1 应用程序。我想为 api 请求返回 json 并为 web 浏览器查看。目前我已经设置了不同的路线和不同的 Controller 。在这种方法中,我重复了代码。我不知道设计这种架构的最佳方法是什么。此外,我还浏览了一些类似的线程,这些线程建议在 Web 浏览器中使用 angular.js。

// web controller
Route::resource('product', 'ProductController');

// api controller 
Route::group(['prefix' => 'api'], function() {
    Route::resource('product', 'APIProductController');
});

最佳答案

你可以有两种基本方法:

  • 保持独立的路由和 Controller ,但将所有通用 Controller 的代码移至服务中。这可能是最干净、最灵活的解决方案,因为它使得将来独立更新 API 和 Web 方法变得非常容易。
  • 或者您可以将 api 和 web 请求路由到同一个 Controller ,将 Request 对象传递给它,然后根据某些请求属性决定返回哪个响应,json 或 html。

例如,对于第二种方法,您可以这样做:

// web controller
Route::resource('product', 'ProductController');

// api controller 
Route::group(['prefix' => 'api'], function() {
    Route::resource('product', 'ProductController');
});

// and in the ProductController you have
public function index(Request $request) 
{
    // do some stuff...

    if ($request->segment(1) === 'api') { // route prefix was api
        // return json
    } else {
        // return the view
    }
}

您还可以使用 $request->wantsJson() 方法来检查 Accept: header ,或者您可以传递一个特殊的 GET 变量(例如 ?_format=json)所有用于定义响应格式的 API 调用都应该是 json,正如@Bogdan Kuštan 已经建议的那样。恕我直言,如果您已经在您的 url 上使用了 api 前缀,那么检查它会更可靠、更清晰。

关于php - 如何为 Web 客户端和 native 移动应用程序设计 Laravel 5.1 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870135/

相关文章:

php - 在不同语言的文件中搜索字符串 - PHP - UTF-8

include 中的 PHP 变量未定义

javascript - 在 VueJS 中从父组件中引用子组件的索引

php - 使用 dropzone.js 和 laravel 5 验证CsrfToken

design-patterns - 文档数据库 - 非规范化引用 - 最佳实践

php - 使用 Joomla MVC 更新 MySQL 表行,

php - 有没有办法为 Zend_Form 元素名称添加前缀?

php - 使用基于文件的 CMS 将开发/生产与 git 同步

java - 我可以在工厂中创建 Callable 并通过调度程序执行它们吗?

java - 下面的OOP设计有更好的替代方案吗?