Я хотел бы разделить мое приложение в модулях. Например, были бы "основные" модули, содержащие основные функции входа, макет/форматирование приложения (CSS и т.д.), Управление пользователями и дневник.
Позже я могу создать другие модули, такие как менеджер контактов, который можно легко добавить или удалить из приложения.
В навигации приложений будет некоторая логика для определения того, какие модули присутствуют, и показать/скрыть ссылки на них.
Как я могу это сделать с точки зрения структуры каталогов, пространств имен и всего, что нужно?
Я смотрю на creolab/laravel-modules, но он утверждает, что это для Laravel 4. Могу ли я использовать его с 5 точно так же?
В документации говорится о размещении моделей, контроллеров и представлений в каждом каталоге модулей, но как это работает с маршрутами? В идеале я хотел бы, чтобы каждый модуль имел свой собственный файл routes.php. Как все это будет работать с материалами в каталоге http
и resources
?
Я думал о чем-то вроде этого:
Но я понятия не имею, как я могу заставить его работать.
Я только что попробовал учебник здесь:
http://creolab.hr/2013/05/modules-in-laravel-4/
Без дополнительных библиотек и т.д., просто чистый Laravel 5.
Кажется, я столкнулся с кирпичной стеной с сообщением об ошибке:
FatalErrorException in ServiceProvider.php line 16:
Call to undefined method Illuminate\Config\Repository::package()
Относительно следующего:
<?php namespace App\Modules;
abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider
{
public function boot()
{
if ($module = $this->getModule(func_get_args())) {
$this->package('app/' . $module, $module, app_path() . '/modules/' . $module);
}
}
public function register()
{
if ($module = $this->getModule(func_get_args())) {
$this->app['config']->package('app/' . $module, app_path() . '/modules/' . $module . '/config');
// Add routes
$routes = app_path() . '/modules/' . $module . '/routes.php';
if (file_exists($routes)) require $routes;
}
}
public function getModule($args)
{
$module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
return $module;
}
}
Что вызывает это и как я могу его исправить?
Теперь я немного об этом подумал. Получил мои маршруты и представления пакетов/модулей, которые великолепны:
abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider
{
public function boot()
{
if ($module = $this->getModule(func_get_args())) {
include __DIR__.'/'.$module.'/routes.php';
}
$this->loadViewsFrom(__DIR__.'/'.$module.'/Views', 'core');
}
public function register()
{
if ($module = $this->getModule(func_get_args())) {
}
}
public function getModule($args)
{
$module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
return $module;
}
}
У меня есть последний вопрос: как я могу загрузить все мои контроллеры из моего пакета, как работает метод loadViewsFrom()
?