В настоящее время я работаю над проектом, в котором есть несколько слабосвязанных модулей (более 20), и я решил использовать Laravel 5 и AngularJ.
я использую йомен генератор для 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?
Является ли эта структура достаточно хорошей, масштабируемой, управляемой?
Если нет, то есть ли лучший способ добиться этого?
Для маршрутизации Laravel вы можете использовать что-то вроде этого:
Route::group(['prefix' => 'subapp1'], function()
{
Route::get('route1/{id}', 'SubApp1Controller@show');
});
Ваше решение, вероятно, будет болезненным для управления в будущем. Это создает сложность и дублирование, не покупая вам много с точки зрения функциональности. Я хотел бы убедиться, что у вас есть действительно веская причина для этого, кроме того, что разработчикам легко работать самостоятельно, потому что у вас все еще может быть это при следующем подходе.
Я бы предложил использовать одно приложение Laravel для обработки всех маршрутов с отдельным контроллером (или контроллерами) для каждого дополнительного приложения. Его будет проще поддерживать, и он по-прежнему позволяет разработчикам сохранять свои собственные файлы, чтобы они не конфликтовали друг с другом. Исключением будет routes.php
, но вы можете определить маршруты заранее, чтобы разработчики не все редактировали его.
Я предпочитаю держать Angular отдельно от Laravel, помещая код Angular в общую папку, но это зависит от того, сколько вы планируете делать с Blade и Angular. Трудно сказать, не зная больше о ваших приложениях, но вы могли бы оставить большую часть работы в Angular, и Laravel просто отправил бы начальную страницу.
Это позволяет избежать конфликтов между Blade и Angular и не позволяет отделить приложение Angular от Laravel. Но если вы решите сохранить Angular в представлениях Laravel, обязательно позаботьтесь об этом. Несколько общих решений — изменить разделители с {{ }}
или префикс Угловые выражения с символом @, например, так: @{{ user.email }}
чтобы Блейд не разбирал их.
Вот как вы можете выложить структуру каталогов:
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
Я понимаю модули как самостоятельную часть приложения. И приложение формируется разными модулями. Каждый модуль может иметь свою конфигурацию и маршрутизацию, которые могут быть переопределены в конфигурации приложения. Это может быть достигнуто с поставщиками.
Как структура файловой системы, я рекомендую прочитать две ссылки об организации вашего приложения по модульному принципу. Вот а также Вот.
Еще одна вещь — это использовать controllerAs и избегать использования области видимости в контроллере, поскольку область видимости исчезнет в будущих версиях angular.
Еще один ресурс гид по стилю