この記事では、簡単に拡張可能なモジュール構造を作成する方法について説明します。 同様の組織が
Symfonyで使用されています。
Composerも使用します。 それが何であり、どのように使用するかは
ここで読むことができ
ます 。
したがって、モジュール構造は主に
制御反転の原理に基づいてい
ます 。
IoCコンテナと独自の
ライブラリを使用し
ます 。
モジュール管理ライブラリを作成することから始めましょう。 私はそれを
Modularと呼びました。
最初にcomposer.jsonについて説明します。
{ "name":"elfet/modular", "type":"library", "autoload": { "psr-0": { "Modular": "src/" } }, "require":{ "php":">=5.3.0", "elfet/ioc":"dev-master" } }
「モジュラー」を使用する場所では、IoCを接続します。
モジュラーシステムの提案された構造は次のとおりです。
index.php - app/ app.ini - ModuleOne/ module.ini - ModuleTwo/
Appコントローラーの前面のクラスについて説明します。
namespace Modular; use IoC\Container; use Composer\Autoload\ClassLoader;
モジュールのロードがどのように機能するかを見てみましょう。
public function load($moduleName, $moduleClass, $moduleDir) {
モジュールを記述するモジュールクラスを作成します。
namespace Modular; use IoC\Container; use IoC\Assoc\Service; class Module { private $moduleDir;
次に、モジュールを作成してから展開してみましょう。 簡単にするために、ノートブックを作成してみてください。 すべてのコードは
ここにあります 。
composer.jsonを作成します。
{ "require":{ "php":">=5.3.0", "elfet/modular":"dev-master" } }
そしてcomposer installを実行します。 これで、必要なものがすべて揃ったベンダー/フォルダーができました。
アプリ/メモ帳/フォルダーを作成し、StorageInterfaceストレージインターフェイスを作成することから始めます。
namespace Notepad; interface StorageInterface { public function set($key, $value); public function get($key); public function save(); public function load(); }
また、
FileStorageの簡単な実装。
コード namespace Notepad; use Notepad\StorageInterface; class FileStorage implements StorageInterface { protected $store = array(); protected $file; public function __construct($file = 'store.json') { $this->file = realpath(__DIR__ . '/../cache/' . $file); } public function set($key, $value) { $this->store[$key] = $value; } public function get($key) { return isset($this->store[$key]) ? $this->store[$key] : null; } public function save() { file_put_contents($this->file, json_encode($this->store)); } public function load() { $content = file_get_contents($this->file); $this->store = (array)json_decode($content); } }
module.iniでこのクラスを説明し
ます 。
[Notepad\FileStorage] interface = Notepad\StorageInterface file = store.json
これで、StorageInterfaceが含まれるコンストラクターのクラス(たとえばNotepad \
Controller )はFileStorageを受け取ります。
public function __construct(StorageInterface $storage)
すべてのメモ帳コードは
こちらから入手でき
ます 。
Notepadモジュールを拡張するMyNotepadモジュールを作成してみましょう。 たとえば、DbStorageを使用したいとします。
app / MyNotepad / DbStorage.phpを作成し、
app / MyNotepad / module.iniで記述します。
[MyNotepad\DbStorage] database = mystore.db
モジュールを
app.iniに追加します
[Notepad] path = Notepad/ [MyNotepad] path = MyNotepad/
これで、Notepad \ Controllerクラスは、作成時にMyNotepad \ DbStorageクラスのインスタンスを受け取ります。 そのように、メモ帳モジュールを変更せずに、その機能を拡張しました。
githubで、メモ帳の他の部分をオーバーライドする方法を確認できます。
リンク集