Praca z domyślną strukturą projektu udostępnioną przez Dframe jest absolutnie dobra, gdy pracujemy w małym lub średnim projekcie. Ale kiedy jest to wielka aplikacja z ponad 30 modelami, wtedy zaczynamy dusić się na własnej bazie kodu.
Utrzymanie dużej aplikacji nie jest prosta. Zwłaszcza, gdy nie jest odpowiednio zorganizowana.
Z pomocą przychodzi HMVC z dodatkiem Domain Driven Design
Pierwszym krokiem do rozpoczęcia jest dodanie do composer.json naszego namespace'a
"autoload": {
"psr-4": {
"": "app/",
"MyProject\\SubModule\\": "modules/MyProject/SubModule/src",
}
}
Aby moduł zaczął działać należy dodać do pliku app/Bootstrap.php poniższy kod
$this->providers['modules'] = [
/** ... */
\MyProject\SubModule\Module::class,
];
W głównym katalogu aplikacji towrzymy folder Modules w nim umieszczamy nasz moduł np
MyProject/subModule/src w folderze src umieszaczamy poniższy kod
<?php
namespace MyProject\SubModule;
use Dframe\Modules\ManagerModule;
class Module extends ManagerModule
{
public function boot()
{
}
public function register()
{
}
}
Dla rejestracji widoku:
<?php
namespace MyProject\SubModule\View;
class Index extends \View\IndexView
{
public $dir = __DIR__.'/templates';
}
Przykład ładowania modelu
/** Ładowanie modelu */
$MyModelModel = $this->loadModel('MyModel', 'MyProject/SubModule');
/** Ładowanie widoku */
$View = $this->loadView('Index', 'MyProject/SubModule');
Struktura Dframe z użyciem DDD wygląda w następujący sposób
| composer.json
| composer.lock
| LICENSE
|
+---app
| | Bootstrap.php
| |
| +---Config
| | | router.php
| | |
| | \---view
| | smarty.php
| |
| +---Controller
| | | Controller.php
| | | Page.php
| | |
| | \---Users
| | Users.php
| \---View
| | Index.php
| | View.php
| |
| +---templates
| | footer.html.php
| | header.html.php
| | index.html.php
| |
| +---errors
| | 404.html.php
| |
| +---page
| test.html.php
+---Modules
| |
| +---Users
| |
| +---src
| | Module.php
| |
| +---Command
| | Users.php
| |
| +---Config
| | users.php
| |
| +---Model
| | Users.php
| | Role.php
| |
| +---Entity
| Users.php
|
|---vendor
\---web
| config.php
| index.php
|
+---assets
Edit page (Guide/hmvc/overview)