2015-04-01 79 views
5

我目前正在研究一个有多个松散耦合模块(20+)的项目,并且我决定使用Laravel 5和AngularJs。 我使用的是AngularJS的yeoman angularify生成器。 我无法决定应用程序结构,我最好希望每个子模块都是不同的应用程序,因为开发人员可以轻松地在独立的应用程序上工作。多个Laravel 5和AngularJS应用程序

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/ 
      ... 

而对于路由,我想是这样的:

http://mylabs         //login OR landing Page 
http://mylabs/subapp/route1/123someid 

什么是Laravel实现这一目标的最佳方式是什么?

这个结构是否足够好,可扩展,易于管理?

如果不是有更好的方法来实现这一目标吗?

回答

0

我将模块理解为应用程序的独立部分。并且应用程序由不同模块构成。每个模块都可以让配置和路由在应用的配置上覆盖。这可以通过提供商来实现。 作为文件系统结构,我建议阅读这两个有关以模块化方式组织您的应用程序的链接herehere。 还有一件事是使用controllerAs并避免在控制器中使用范围,因为范围将在未来版本的angular上消失。 另一个资源是styleguide

6

对于Laravel路由你可以使用这样的事情:

Route::group(['prefix' => 'subapp1'], function() 
{ 
    Route::get('route1/{id}', '[email protected]'); 
}); 

您的解决方案可能是管理的道路有疼痛感。它在创造复杂性和重复功能的同时不会在功能上给你带来太多的收益。除了让开发人员独立工作之外,我会确保你有一个很好的理由去做,因为你仍然可以通过以下方法来实现。

我建议使用单个Laravel应用程序来处理每个子应用程序的单独控制器(或控制器)的所有路线。维护起来会更容易,并且仍然可以让开发人员保留在他们自己的文件中,这样他们就不会相互冲突。例外情况是routes.php,但您可以预先定义路由,以便开发人员不会全部编辑它。

我更喜欢将Angular的代码放在公共文件夹中,以保持Angular与Laravel分离,但这取决于您计划对刀片与Angular做多少计划。如果不了解更多有关应用的信息,很难说,但是您可以将大部分工作留在Angular中,而Laravel只会发送最初的页面。

这可以避免刀片与角度表达式冲突,并使角度应用与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 
+0

我与你的复杂程度并不一致,意识到很快..找到[这里](http://ziyahanalbeniz.blogspot.com! tr/2015/03/modular-structure-in-laravel-5.html),实施它。它现在工作。 – 2015-04-08 11:24:23

+0

我可以在http://sky.pingpong-labs.com/docs/2.0/modules上了解您的观点吗?这看起来似乎解决了OP的问题 – Tamil 2015-04-08 12:24:15

+0

@Tamil我以前没有使用该解决方案,但我同意,它解决了OP的问题。它确实增加了一个额外的依赖关系,但只要维护它,这不是问题。 – 2015-04-08 13:11:27