2013年7月26日金曜日

Zendframeworkでモジュールを複数作成する時の注意点(Controller)

後でまとめるかもしれませんが備忘録的に。
Zendframework1+Smartyでコーディングする時の話です。


フォルダ構成は以下の通り。

-application/
  |_ modules/
     |_ default/
     |   |- controllers/
     |   |   |_ IndexController.php
     |   |- models/
     |   |_ views/(Smartyのテンプレートファイルはここに格納)
     |
     |_ admin/
     |   |- controllers/
     |   |   |_ IndexController.php
     |   |- models/
     |   |_ views/
     |
     |_ user/
         |- controllers/
         |- models/
         |_ views/

この時、defaultのIndexControllerのクラス名は

<?php
    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action{
        public function indexAction() {
            $this->view->result = 'Smarty is running!';
        
        }
    }

こんな感じで表示"(baseurl)/"にアクセスすると下記のように正常に表示してくれるのでいいんですが、

default

例えばadminモジュールの場合は同じクラス名にすると
"Invalid controller class ("Admin_IndexController")" とか、
"Invalid controller specified (index)"とか、
"EXCEPTION_NO_CONTROLLER"とかエラー出力の環境設定によってこんな感じのエラーメッセージが出るんですね。
なので、adminモジュールでIndexControllerクラスを扱いたい場合は

<?php
    require_once 'Zend/Controller/Action.php';

    class Admin_IndexController extends Zend_Controller_Action{
        public function indexAction() {
            $this->view->result = 'Smarty is running!';
        
        }
    }

のように、IndexControllerの前にモジュール名である"Admin"と"_(アンダースコア)"を付ける必要があるんですね。
表示URLは"(baseurl)/admin/"でも飛べます。

admin

前作ったはずなのに引っかかったのでメモ代わりに。