如何使用具有相同控制器的 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如何将数据从表单传递到控制器

laravel 自己的 api 使用来自具有承载令牌的控制器

Laravel 5.5 无法在表单请求类中制作验证器

如何使用单个 Laravel 代码实例配置和运行具有各自数据库的多个网站

如何在 laravel 中为两种不同的控制器功能方法使用相同的路由