システムのタイプを multi-module にすると名前空間が絡んでくる。
以下に設定方法をまとめる。
まずは Modules.php で
自動生成される registerAutoloaders() で Controller と Models の名前空間を確認する。
自動生成であれば問題ないはず。
<?php class Module implements ModuleDefinitionInterface { public function registerAutoloaders(){ $loader = new Loader(); $loader->registerNamespaces(array( 'My_project\Frontend\Controllers' => __DIR__ . '/controllers/', 'My_project\Frontend\Models' => __DIR__ . '/models/', )); $loader->register(); } }
次は Model の設定。
上記の設定でModelsディレクトリ直下のファイル群は 'My_project\Frontend\Models' という名前空間なので、
各クラスで名前空間を設定する。
<?php namespace My_project\Frontend\Models; class Companies extends \Phalcon\Mvc\Model{ ........ }
Controllerでも同じように名前空間を設定する。
Controller内で利用するクラスは use を使って定義しておく。
<?php namespace My_project\Frontend\Controllers; use My_project\Frontend\Models\Companies; class IndexController extends ControllerBase { public function indexAction(){ $c = new Companies(); $c = $c->getAllData(); print_r($c[0]); exit(); } }
以上でCompaniesクラスがControllerで利用可能になる。
また、Phalconの既存クラスも名前空間を指定しないと、
Controllerの名前空間に設定されてしまう。
以下はViewをレンダリングしないようにする設定だが、
Controllerに名前空間を指定しているので、
use を使って Phalcon\Mvc\View as View にしないと、
Viewクラスが正しく認識されない。
<?php namespace Dir_project\Frontend\Controllers; use Phalcon\Mvc\View as View; class IndexController extends ControllerBase{ public function indexAction(){ $this->view->setRenderLevel(View::LEVEL_NO_RENDER); echo 'test'; } }