我目前正在使用Laravel 5.1构建一个Web应用程序,并希望开始创建一个本机应用程序,以便我的用户可以使用他们的手机。我已经决定使用Ionic Framework可能是该应用程序的最佳方法,只是将两者结合在一起有几个问题。
我在Laravel的路线看起来像这样的例子:
app.dev/geckos
- 这是GET
请求。
使用当前经过身份验证的用户,使用其ID并获取与其用户ID匹配的所有geckos。但它确实返回了一个刀片视图。
我认为在使用像Ionic这样的东西时,GET
请求需要返回JSON
而不是为了正确循环?
有没有办法让我可以根据路线是否像这样改变我的控制器以服务JSON
:
app.dev/api/v1/geckos
两条路线都会使用GeckoController@index
方法,理想情况下,我只是不想重复代码。
我
对此信息表示赞赏,
安迪
答案 0 :(得分:3)
我使用的另一个解决方案是在Laravel中使用1.应用程序,它是一个RESTful JSON API。那么你将拥有2. Web应用程序(在AngularJS中)和3. Ionic中的移动应用程序(基于AngularJS)。
因此,您将创建两个独立的应用程序,移动和Web,它们都使用相同的JSON API进行通信。 Web将是单页AngularJS应用程序,因此您可以重用与API通信的所有Angular服务,甚至可以重新使用移动Ionic和Web应用程序之间的某些控制器。
为移动/ Web应用程序创建两个单独的响应时,您将节省一些时间,因为您只创建一个:JSON响应。 AngularJS将负责两个应用程序中的渲染,这样您就不必在Blade中为Web应用程序创建单独的模板,而是在两个应用程序中使用Angular进行所有渲染。在Web和移动应用程序中呈现相同内容会有一些细微差别,但它只需要为两个应用程序创建单独的js指令/ css样式/ html模板,使用Blade您将无法重用任何与视图相关的代码申请之间。此外,您还可以对两个应用程序使用相同的身份验证方法。
总而言之,此解决方案应该比您的解决方案更清洁,因为您将能够在应用程序之间完全重用后端,重用许多前端内容(如输入验证代码,服务,过滤器......),重用身份验证并且引入更松散的耦合并且具有比控制器中的丑陋响应型开关更清晰的结构。
修改强> 所以这可能是这个项目结构的一个粗略例子:
1. API - REST in Laravel, returning JSON
-Controllers
-Session // actions CREATE, DELETE
-User // actions CREATE, VIEW, UPDATE, DELETE..
-Gecko
2. JS application - Angular App, for both mobile and web app
-common //controllers, services, filters - most of the frontend logic which reusable between both applications
-controllers.js
-services.js
-filters.js
-mobile //this part can be hosted on some server or part of the mobile application
-app.js //separate configs for mobile app
-controllers.js //controllers only for mobile app
-directives.js
-web
-app.js //separate configs for web app (links to HTML template URLS,...)
-controllers.js //controllers only for web app
-directives.js
-services.js //or even services only for web app
3. WEB APP
-HTML Templates - bunch of static .HTML files
-Home
-Login
-Register
-Gecko
-Gecko Views...
-Some index file with layout template, which includes everything from js/common and js/web, entry point to your web application
4. MOBILE APP
-www
-index.html // must include everything from js/common and js/mobile
-templates
-Gecko
-Gecko Views...
但结构可能会有很大差异,具体取决于您希望在Web服务器上托管的移动应用程序的哪个部分以及哪些部分应该可脱机使用,或者您希望如何托管它,结构的详细程度如何......
答案 1 :(得分:1)
执行此操作会很麻烦,因为您的单个控制器操作将返回两个完全不同的响应。
但是,如果你沿着这条路线走,你可以从移动应用程序中为请求添加一个额外的标题,然后检查这个以切换响应。