Swa*_*l.C 5 php angularjs angular-ui-router laravel-routing laravel-5
我目前正在开发一个项目,它有多个松耦合模块(20+),我决定选择Laravel 5和AngularJs.我正在为AngularJS 使用yeoman angularify生成器.我无法决定应用程序结构,理想情况下我希望每个子模块都是一个不同的应用程序,因为开发人员可以轻松地独立处理单独的应用程序.
mylab/
app/
Http/
Controllers/
SomeController.php # API's that will be used across all apps
...
public/
bower_components/
angular/
bootstrap/
scripts/
angular.Modules.js #custom modules to be used across all apps
..
resources/
views/
.. #landing page view
Sub-App1/
app/
Http/
Controllers/
SubApp1Controller #sub-app1 specific API's
..
public/
bower_components/
repo1/ #specific to sub-app1
...
resources/
AngularApp1 #SPA for sub-app1
views/
Sub-App2/
app/
...
Run Code Online (Sandbox Code Playgroud)
对于路由,我想要像:
http://mylabs //login OR landing Page
http://mylabs/subapp/route1/123someid
Run Code Online (Sandbox Code Playgroud)
在Laravel实现这一目标的最佳方法是什么?
这种结构是否足够好,可扩展,易于管理?
如果没有,有没有更好的方法来实现这一目标?
小智 6
对于Laravel路由,您可以使用以下内容:
Route::group(['prefix' => 'subapp1'], function()
{
Route::get('route1/{id}', 'SubApp1Controller@show');
});
Run Code Online (Sandbox Code Playgroud)
您的解决方案可能是一个难以管理的道路.它在创建复杂性和重复性方面没有在功能方面为您带来太多收益.除了易于开发人员独立工作之外,我会确保你有充分的理由这样做,因为你仍然可以通过以下方法实现这一目标.
我建议使用单个Laravel应用程序来为每个子应用程序使用单独的控制器(或控制器)处理所有路由.它将更容易维护,并且仍然允许开发人员保留在他们自己的文件中,以便它们不会相互冲突.例外情况是routes.php,但您可以预先定义路由,以便开发人员不会全部编辑它.
我希望通过将Angular代码放在公共文件夹中来将Angular与Laravel分开,但这取决于你计划用Blade vs. Angular做多少.如果不了解更多有关您的应用程序的内容很难说,但您可以将大部分工作留在Angular中,Laravel只会发送初始页面.
这避免了Blade与Angular表达式的冲突,并使Angular应用程序与Laravel分离.但是如果你选择在Laravel视图中保留Angular,请确保以某种方式处理它.一些常见的解决方案是{{ }}使用@符号更改分隔符或使用@符号前缀Angular表达式,@{{ user.email }}以防止Blade解析它们.
以下是如何布局目录结构:
app/
Http/
Controllers/
AppBaseController.php # API's that will be used across all apps
SubApp1Controller.php # sub-app1 specific API's
SubApp2Controller.php # sub-app2 specific API's
...
public/
bower_components/
angular/
bootstrap/
scripts/
angular.Modules.js # custom modules to be used across all apps
AngularApp1/ # SPA for sub-app1
AngularApp2/ # SPA for sub-app2
...
resources/
views/
... # landing page view
sub-app1/
... # sub-app1 views
sub-app2/
... # sub-app2 views
Run Code Online (Sandbox Code Playgroud)