【问题标题】:Multiple Laravel 5 and AngularJS Apps多个 Laravel 5 和 AngularJS 应用程序
【发布时间】:2015-06-06 03:17:50
【问题描述】:

我目前正在从事一个具有多个松散耦合模块(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/
            ...

对于路由,我想要类似的东西:

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

在 Laravel 中实现这一目标的最佳方法是什么?

这种结构是否足够好、可扩展、可管理?

如果没有,有没有更好的方法来实现这一点?

【问题讨论】:

    标签: php angularjs angular-ui-router laravel-5 laravel-routing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于 Laravel 路由,您可以使用如下内容:

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

      您的解决方案可能会难以管理。它会增加复杂性和重复性,而不会在功能方面给您带来太多好处。我会确保你有一个很好的理由去做这件事,而不是让开发人员更容易独立工作,因为你仍然可以通过以下方法做到这一点。

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

      我更喜欢通过将 Angular 代码放在公用文件夹中来将 Angular 与 Laravel 分开,但这取决于您计划对 Blade 与 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
      

      【讨论】:

      • 我同意你关于复杂性的观点,很快就意识到了!.. 找到this,实现了它。它现在有效。
      • 我可以知道您对sky.pingpong-labs.com/docs/2.0/modules 的看法吗?这几乎看起来正在解决 OP 的问题
      • @Tamil 我以前没有使用过该解决方案,但我同意,它解决了 OP 的问题。它确实增加了一个额外的依赖,但只要他们维护它就不是问题。
      • @DanH 关于依赖的观点是有道理的
      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2015-12-30
      • 2015-06-02
      • 2017-05-13
      • 2016-02-15
      • 2016-09-03
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多