如何使用具有相同控制器的 Laravel 制作网站和 API REST?
Posted
技术标签:
【中文标题】如何使用具有相同控制器的 Laravel 制作网站和 API REST?【英文标题】:How to make a Website and API REST with Laravel with the same Controllers? 【发布时间】:2015-11-27 10:17:56 【问题描述】:我真的是 Laravel 框架的新手,我想开发一个也有自己的 API Rest 的 Web 应用程序,但我不知道哪种方法最好。
我希望控制器和方法对于 Web 操作和 API REST 操作可以是相同的,例如对于用户模块,如果我提出这样的请求:
http://myproject.com/userRegister/
然后网络向我显示了一个带有用户注册表单的视图 html,但是如果我调用这样的请求:
http://myproject.com/api/userRegister/
然后响应将是一个 JSON,其中包含我注册用户所需的表单数据。
我希望他们都使用 UserRegisterController 和相同的方法,例如:“formRegister”,所有这些都是为了避免在不同的方法中重复业务逻辑。
知道什么是最好的方法吗?我进行了研究,有些人建议使用 JSON 响应制作所有服务并使用 AngularJS 或类似方法进行解析,但我不希望这样,我只想将 Laravel 与 HTML 一起使用。
【问题讨论】:
最好将它们作为单独的控制器保留,但让它们实现相同的存储库。 【参考方案1】:让相同的控制器处理 api 和 web 请求并不是最好的决定。这种逻辑迟早会导致代码混乱。
不要忘记让控制器尽可能精简,并将大部分逻辑移至模型、服务和存储库。这将帮助您拥有两个尽可能少的代码的独立控制器版本。
但如果您仍想组合它们,您可以使用\Request::acceptsJson()
\Request::acceptsHtml()
方法来确定您的请求类型。
【讨论】:
但是将它们分开会导致过多的冗余代码 不,如果你让你的控制器尽可能的紧(顺便说一句,你必须这样做)。以上是关于如何使用具有相同控制器的 Laravel 制作网站和 API REST?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel中的路由问题,带有多个控制器和具有相同名称的不同路由[关闭]
laravel 自己的 api 使用来自具有承载令牌的控制器