• ベストアンサー

zendframeworkを勉強中です。

seimurakamの回答

  • ベストアンサー
回答No.1

自分もZend_Controller_ActionのinitやZend_Db_Tableのsaveなど そこから発生するクラスは同様の処理を行う場合が多いので、 dcx147さんと同じような悩みを一時期持ちましたが、 今は、ZendFrameworkの提供するクラス群をラッパーした 独自の派生クラスライブラリを作って そちらを使用するような構成でシステムの構築を行っています。 例 [ライブラリクラス] class Dcx_Controller_Action extends Zend_Controller_Action {   public function init()   {     //共通処理   } } [実装] class IndexController extends Dcx_Controller_Action {   public function hogeAction()   {     //必要な処理     // fooActionと重複するようなソースであればmodelにclassファイルを作成   }   public function fooAction()   {     //必要な処理     // hogeActionと重複するようなソースであればmodelにclassファイルを作成   } } といった感じでいかがでしょうか?

dcx147
質問者

お礼

お返事ありがとうございます。 やはり抱える悩みは一緒なのですね~自分だけかと思っておりましたが安心しました。 確かにアドバイス頂いた方法であれば簡単に共通処理を実行する事ができますね! どんな方法がいいものか悩んでおりましたが参考にいじってみたいと思います。 非常に参考になるご意見ありがとうございます!

関連するQ&A

  • ZendFramework-1.0.2の環境設定

    IndexController.php以外の Controllerファイルが起動いたしません。 以下のようなエラーが出力されます。どのように対処したらよいでしょうか。よろしくお願いいたします。 Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\zend\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php:194 Stack trace: #0 C:\zend\ZendFramework\library\Zend\Controller\Front.php(920): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\zend\ZendFramework\library\Zend\Controller\Front.php(224): Zend_Controller_Front->dispatch() #2 C:\Apache Group\Apache2.2\htdocs\zdb1\index.php(10): Zend_Controller_Front::run('./application/c...') #3 {main} thrown in C:\zend\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php on line 194

    • ベストアンサー
    • PHP
  • zendframeworkについて

    zendframeworkを勉強中です。 マニュアルを読んでもプラグインについて理解が深められず質問なのですが 下記のメソッド内でどのような処理を行うべきなのでしょうか? ・routeStartup ・routeShutdown ・dispatchLoopStartup ・preDispatch ・postDispatch ・dispatchLoopShutdown 考えられるのは・・・ DB接続、認証、PCと携帯サイトの切替え、文字コード変換などでしょうか? しかし、文字コードの変換はビューのヘルパーの方が妥当な気もしますが何を どこで処理すべきなのかこんがらかっております・・・ 人によって実装する処理も異なるかと思うのですが一般的な流れなどを教えて いただけますと幸いです。 ちなみに現在は、DBの接続など初期設定を全てBootstrap.phpで行っています。 ※_initDb()など セッションの開始などもBootstrap.phpで行っており、初期設定が増えるに つれて、メソッドも増えるのでソースも長くなってしまいます。 後のメンテを考慮しそれぞれの処理を各プラグイン化しようかと思っている のですがこのような使い方は正しいでしょうか? 最初は、下記のように1つのプラグインを作成しメソッドが実行される タイミングに合わせDBの接続など必要な処理を行い、これで完結すれば いいかと思ったのですが結果、現在のBootstrap.phpと同様です。 class Ext_Plugin_Setup extends Zend_Controller_Plugin_Abstract { public function routeStartup(Zend_Controller_Request_Abstract $request) { echo 'routeStartup<br>'; } public function routeShutdown(Zend_Controller_Request_Abstract $request) { echo 'routeStartup<br>'; } public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { echo 'routeStartup<br>'; } public function preDispatch(Zend_Controller_Request_Abstract $request) { echo 'routeStartup<br>'; } public function postDispatch(Zend_Controller_Request_Abstract $request) { echo 'routeStartup<br>'; } public function dispatchLoopShutdown() { echo 'routeStartup<br>'; } } 無理にプラグインを使わなくても・・・という事も考えられますが理解を 深めたく思っておりますので詳しい方がいらっしゃいましたらアドバイス お願いいたします。

    • ベストアンサー
    • PHP
  • zendframeworkの階層

    zendframeworkの階層について質問です。階層を深くした場合の構造が理解できません。 例えばexsample.com/test/というURLの場合 /application/controllers/TestController.php class TestControllerAction extends Zend_Controller_Action { public function indexAction() { //略 } } とすればこれで問題なく動作しますが exsample.com/hoge/test/というURLの場合はどのようにしたらいいですか? ルーター?の設定等は特に変更はしておらずデフォルトの状態で利用しています。

    • ベストアンサー
    • PHP
  • ZendFramework1.0.0RCの動作方法

    テスト的にコントローラー部で Zend::loadClass('Zend_Controller_Action'); Zend::loadClass('Zend_View'); という記述をしているのですが、 Fatal error: Class 'Zend' not found in C:\Program Files\Apache Group\Apache2\htdocs\controllers\IndexController.php on line 2 と言われてしまいます。 なんの設定ミスか分かるでしょうか? include_pathは、mod_rewriteによって飛ばされるindex.phpの1行目にset_include_path()を利用して設定しています。

    • 締切済み
    • PHP
  • ZendFrameworkでParseError

    レンタルサーバへZendFrameworkのライブラリを設置したところ、以下のエラーが出ます。 Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/****/*****/ZendFramework/library/Zend/Controller/Front.php on line 44 index.phpでFront.phpをrequire_onceしているので、index.phpもZendFrameworkライブラリも設定は間違っていないのではないかと思われます。 ライブラリのデータ破損などがあることも考え、若干バージョンの違うものをアップロードしてみましたが同じでした。 自分の作成したファイルでエラーが出ているのであれば問題点の探しようもあるのですが、フレームワークのライブラリなので、どう対処していいかが分かりません。 分かる方がいらしたらぜひ教えてください。

    • ベストアンサー
    • PHP
  • PHP ZendFrameworkについて

    PHP ZendFrameworkについて質問がございます。 ブログのようなシステムを作成しており、 フロントコントローラでのルータ設定で困っております。 サイトのURL構成を以下のように考えております。 ■ユーザー画面 http://domain/blogId/controller/action/* ■ブログ所有者の管理画面 http://domain/blogId/module/controller/action/* ※blogIDには、任意の半角英数字が入ります。 ※管理画面の module には "admin" が入る予定です。 ■記述したソース ----------------------------------------------------- // フロントコントローラのインスタンス $front = Zend_Controller_Front::getInstance(); // モジュールディレクトリの設定 $front->addModuleDirectory(_SYS_PATH_.'app/modules'); // ルータを取得 $router = $front->getRouter(); // ルートを設定する $newRoute = array('blogId' => 'none', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ); $route = new Zend_Controller_Router_Route(':blogId/:module/:controller/:action/*', $newRoute); $router->addRoute('default', $route); // ディスパッチする $front->dispatch(); ----------------------------------------------------- 上記のソースで、 ブログ所有者の管理画面はいいのですが、 ユーザー画面で、 http://domain/blogId/controller/action/* とアクセスすると controller が module になってしまいます。 http://domain/blogId/controller/action/* と、moduleを省いた場合は default のモジュールを呼び出せるようにしたいのです。 さらに モジュール を追加するとして、そのモジュールにアクセスする場合は、 http://domain/module/controller/action/* と blogId をはずしてアクセスしたいのですが、可能でしょうか? 初歩的なことかと思いますが、ご教授のほど宜しくお願い致します。

    • 締切済み
    • PHP
  • ZendFramework 環境設定

    現在、Zendframeworkで開発していこうと考えていたんですが、以下のエラーがでて先に進めません。本来は「http://localhost」とアクセスすると画面が表示されるはずなのですがダメです。 環境[OS X] サーバー[Xampp for mac] Warning: require_once(Zend/Controller/Front.php): failed to open stream: No such file or directory in /Applications/XAMPP/xamppfiles/htdocs/index.php on line 2 Fatal error: require_once(): Failed opening required 'Zend/Controller/Front.php' (include_path='.:/php/includes:/Applications/XAMPP/ZendFramework/library/Zend') in /Applications/XAMPP/xamppfiles/htdocs/index.php on line 2

    • 締切済み
    • PHP
  • デフォルト、フロントコントローラについて(zend)

    ZendFrameWorkの処理順についての質問です。 ・http://example.comとアクセスするとデフォルトコントローラのアクションが呼び出されるとのことですが、ここには通常どのような処理を行うものなのでしょうか? ・また、外部からのリクエストを受けるのがフロントコントローラとのことですが、これはここにはどのような処理をするのが一般的でしょうか? ・最後にコントローラの初期化を行うにはinit()メソッドを使用するとのことですが、これはどのファイルに書くのがよろしいでしょうか? 以上3点です。ご存知の方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • Zend Frameworkでoracle接続

    Zend Frameworkを勉強しようと思い始めたばかりのものです。 oracleに繋がらずどこをチェックすればよいのかさっぱりわかりません。 どなたかご教授願えないでしょうか? zfツールを使い雛形を作って、module で分けてみたり、ヘッダー、フッターをlayoutを使って分けたりと少し前進しました。 次はDB接続だと思い始めたのですが繋がりません。 ■環境 CentOS release 5.6 (Final) ■やったこと 1)oracle接続モジュール oci8 をインストール # export ORACLE_HOME=/opt/oracle/product/10.2.0/db # pecl install oci8 php.ini に追記 # vi /etc/php.ini extension=oci8.so 2)ローカルで接続テスト これは問題なく接続できてるみたいなのです。 # more test.php <?php putenv("ORACLE_HOME=/opt/oracle/product/10.2.0/db"); putenv("LD_LIBRARY_PATH=:/opt/oracle/product/10.2.0/db/lib"); // Zend_Dbライブラリの読み込み require_once 'Zend/Loader.php'; require_once 'Zend/Db.php'; $dbInit = array( 'host' => 'localhost', 'username' => 'usrxx', 'password' => 'usrxx', 'dbname' => 'xxdb' ); $db = Zend_Db::factory('oracle', $dbInit); $db->getConnection(); echo 'OK'; $db->closeConnection(); # php test.php OK 3)Zend Frameworkで接続テスト IndexController.php の indexAction でやってみたのですがダメなのです。 public function indexAction() { $dbInit = array( 'host' => 'localhost', 'username' => 'usrxx', 'password' => 'usrxx', 'dbname' => 'xxdb' ); $db = Zend_Db::factory('oracle', $dbInit); $db->getConnection(); $db->getConnection(); echo 'OK'; $db->closeConnection(); } ※/etc/sysconfig/httpdに以下を追加しました export ORACLE_HOME=/opt/oracle/product/10.2.0/db export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/db/lib 実行するとどうしてもエラーとなります。 ■エラーメッセージ An error occurred Application error Exception information: Message: Unknown exception Stack trace: #0 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Db/Adapter/Abstract.php(315): Zend_Db_Adapter_Oracle->_connect() #1 /home/www/zf/application/modules/default/controllers/IndexController.php(30): Zend_Db_Adapter_Abstract->getConnection() #2 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Action.php(516): IndexController->indexAction() #3 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction') #4 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #6 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #7 /home/www/htdocs/shopping/necs/zf/index.php(29): Zend_Application->run() #8 {main} Request Parameters: array ( 'controller' => 'index', 'action' => 'index', 'module' => 'default', ) どこを確認すればよいかのサッパリわからず投稿させていただきました。 何卒よろしくお願いします。

    • 締切済み
    • PHP
  • zendのcontrollersについて

    Zendを始めたばかりのものです。 サーバ:XPで自営 Apache2,php5 Zendをダウンロードし、Cドライブのルートに「ZendFramework-1.9.0」 という名前で配置しました。 php.iniのinclude_pathの設定も変更し、 htdocsの直下にindex.phpを作成し <?php require_once 'Zend/Version.php'; //ライブラリの読み込み echo Zend_Version::VERSION; //現在のZend Frameworkのバージョンを表示 とすると、正常にバージョンが表示されます。 zendappsというフォルダーをhtdocsの中に作成し、index.phpに <?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('../zendapps/controllers'); とするとエラーになります。(エラーは長いので後述) '../zendapps/controllers'の部分かとも思いますが、 お分かりになる方、教えていただけると幸いです。 エラーの内容 Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\ZendFramework-1.9.0\library\Zend\Controller\Dispatcher\Standard.php:242 Stack trace: #0 C:\ZendFramework-1.9.0\library\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\ZendFramework-1.9.0\library\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\zendapps\index.php(3): Zend_Controller_Front::run('../zendapps/con...') #3 {main} thrown in C:\ZendFramework-1.9.0\library\Zend\Controller\Dispatcher\Standard.php on line 242

    • ベストアンサー
    • PHP