• 締切済み

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
  • 回答数1
  • ありがとう数0

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

:blogIdが数字で:moduleが文字列なら[変数の制約]をつければできるんじゃないでしょか。 しかし定義が曖昧すぎてわけわからなくなりそうですね。 明示的なパスをつけた方がよいでしょう。 /:blogId/admin/:controller/:action/* /:blogId/article/:controller/:action/*

関連するQ&A

  • ZendFrameworkでModule階層化

    会社のプロジェクトで最近ZendFramework(以下ZF)を使い始めたのですが、 いきなりハマりました・・・ というのもそこそこ大規模なシステムで、メニューがかなり深い階層になりそうです。 ・example.com/module/controller/action のような形式でモジュールというものがあってそれを使うと、まず機能の塊を作れるという所まではわかりました。(間違ってたらごめんなさい・・・) 参考URL:http://framework.zend.com/manual/ja/zend.controller.modular.html 例:blog管理・・・blogモジュール、ニュースページ管理・・・newsモジュール、etc・・・ しかし大規模なシステムですと当然機能というものがたくさんあって、モジュールの中にモジュール(他にうまい言い方わかりませんでした・・・)みたいな事も必要になると思います。 http://www.webresourcesdepot.com/wp-content/uploads/file/admin-template/index.html 上のページのように、上部のタブメニューがmodule、左メニューが子module、さらに孫module・・・なんて言うものが必要になるかもしれません。 その場合、moduleの階層化をしないとかなりグチャグチャなソースになりかねません。 理想としては ■blogの管理者管理 ・example.com/blog/admin/xxx/yyy module:blog 子module:admin コントローラ/アクション:xxx/yyy ■newsの管理者管理 ・example.com/news/admin/xxx/yyy module:news 子module:admin コントローラ/アクション:xxx/yyy のように、階層化してすっきりさせたいのですが、実装方法がわかりませんでした。 blogやnewsごとにドメイン分けろと言われるかもしれませんが、管理画面は一つで一元管理したいので、そこは譲れない所です。 どなたかmoduleの階層化に成功した方いらっしゃいましたら教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • ZendFrameworkでコントローラを作る単位

    Zend Frameworkで、コントローラを作る単位は、どのように決めていますか? たとえば、ユーザ管理をするとして、UserController.phpというものを作り、追加・更新・削除のアクションを作るとすると、一つのアクションに、入力・確認・実行の3画面が必要というような要求だと、コントローラのなかみがごちゃごちゃになってしまいます。 ですので、UserAddController.phpというようなコントローラを作り、inputAction,confirmAction,executeActionというようなアクションを作ろうかと考えています。 もちろん自由だとは思いますが、皆さんはどのようにしているのか教えてもらえればと思います。

    • ベストアンサー
    • 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
  • 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
  • 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
  • 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
  • 1つのサーバで複数のドメイン管理

    AWS EC2を使ってウェブサーバを構築し、CakePHPをインストールしてウェブサイトを実装しております。 すでにドメインを2つ取得しており、それぞれのドメインでアクセスした際に、同じディレクトリにある2つのコントローラをそれぞれ実行させてページを表示させたいと思っております。 ドメイン(例) hoge.com fuga.com コントローラ(例) /lib/app/controllers/hoge_controller.php /lib/app/controllers/fuga_controller.php hoge.comに対しては、 routes.phpで Router::connect('/', array('controller' => 'hoge', 'action' => 'index')); と設定して hoge.comでアクセスした際にhogeコントローラのindexアクションが実行されるようにできましたが、この状態を維持しつつfuga.comでアクセスした際にfugaコントローラのindexアクションが実行されるようにできればと思っております。 cakephpやサーバの設定等は自由に行える環境ですので、cakephpのrouterやサーバのバーチャルホストの設定等で実現できますでしょうか。 お分かりいただける方いらっしゃいましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • cakePHPのrouteについて

    現在、cakePHPを使って、プログラムを行っているのですが、 その場合単純に'/'とする場合のみ、routeで実行できるのですが、 formからsubmitボタンが押されたとき、route.phpの名前を見て処理を実行させることができません。 formは、 <form action="<?php echo h($html->url('/blog/view')) ?>" method="post" style="margin-bottom:1em"> <p><?php echo $html->input('Task/content') ?> <?php echo $form->submit("TEst", array("action" => "sample", "type" => "post")) ?> </form> として記述しています。 route.phpには、 Router::connect('/blog/:action', array('controller' => 'top', 'action' => 'cake', 'home')); と記述しています。 考え方'/blog/:action'が、blog(コントローラー名)、actionがfunction action名() {} なので、formから、blogコントローラーのviewアクションを実行するように指示を出し、 本来ならその手順に従い画面が表示される。 なのですが、 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 404 と表示される。 この場合の対策はどうすべきなのでしょうか? つまり、formアクションで渡された引数をroute.phpのroute:connect()の指示の通りに実行し、画面を表示させたい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • エクセル ファイルの起動と同時にVBE画面を開くに

    accessの場合は、AutoExecを作成し、 モジュールを開くアクションでModule1を指定すれば、 ファイルを開いたと同時にVBE画面を開けますが、 エクセルの場合は、ファイルの起動と同時にVBE画面を開くにはどうすればいいでしょうか? Private Sub Workbook_Open() に何かをすると思うのですが、どうすればいいのかわかりません。 ご回答よろしくお願いします。

  • cakephpのページネーションURLについて

    いつもお世話になっております。 ドメインを設定してサイトを作っており、 routes.phpの設定を Router::connect('/:action', array('controller' => 'controller名')); とコントローラーを含めて設定しており、↓のような形になるようにしております。 http://xxxxx.xx.xx/controller名/ → http://xxxx.com/ しかし、ページネーションの際に http://xxxx.com/controller名/action/page:番号 とURLにコントローラー名が出力されます。 コントローラー名が出力されないようにしたいのですが どうすればよろしいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう