如何在Laravel 5中构建模块化应用程序?
我想将我的应用程序划分为模块。例如,将有一个“核心”模块,其中包含基本的登录功能,应用程序布局/格式(CSS等),用户管理和日记。
稍后,我可能会创建其他模块,例如联系人管理器,这些模块可以轻松在应用程序中添加或删除。
应用程序导航中有一些逻辑,用于确定存在哪些模块并显示/隐藏指向它们的链接。
如何在目录结构,命名空间和所需的任何其他方面执行此操作?
我正在研究creolab / laravel模块,但它指出它是针对Laravel 4的。我还能以完全相同的方式与5一起使用吗?
文档说要在每个模块目录中放置模型,控制器和视图,但这如何与路由一起使用?理想情况下,我希望每个模块都有自己的路由.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()