とりあえず前回の解説から。
最後に開いたURLはhttp://zend.localhost/index/indexでした。
最初のindexはindexコントローラを呼び出すという意味で、後ろのindexはコントローラ内のindexアクションを呼び出すという意味です。
結果としてIndexController.php内のIndexController::indexAction()が呼び出されます。
同様に例えばhttp://zend.localhost/hoge/fugaだったら、HogeController.php内のHogeController::fugaAction()が呼び出されるということになります。
http://zend.localhost/だけでもHello, World!が表示されますが、これはコントローラ名やアクション名が省かれた場合はindexとして扱われるためです。
http://framework.zend.com/manual/1.11/ja/zend.controller.quickstart.html#zend.controller.quickstart.go.controller
特に指定しないかぎりビューについてもファイルが自動的に決定され、application/views/scripts/コントローラ名/アクション名.phtmlになります。
URLがhttp://zend.localhost/hoge/fugaであればapplication/views/scripts/hoge/fuga.phtmlです。
そのscriptsってなんだよ。
さて、試しにhttp://zend.localhost/index/aってするとFatal errorが発生します。
IndexController::aAction()が存在しないためです。
このようなエラーをまとめて捕捉できる仕組みが用意されており、エラーコントローラと呼ばれています。
application/controllers/ErrorController.php
現在はただのダミーですが、errorAction()内で原因を取得したりといったこともできます。
ただこれを実装すると、うっかり例外が出てしまったときにエラーコントローラに奪われてしまってvar_dump()などが効かなくなるので、開発時はオフにしておきましょう。
その後はフロントコントローラとか標準のルータとかが色々書いてあるんだけど何に使うのかよくわからんのでとりあえずスルー。
リクエストオブジェクトだけは大事なのでやっておきます。
といってもまあ単に$_REQUESTを取得するってだけですが。
http://zend.localhost/index/index/?a=b&c=d
http://zend.localhost/index/index/a/b/c/d
両方とも同じ意味になり、indexコントローラのindexアクションを呼び、リクエストパラメータaの値が'b'、cの値が'd'という呼び出しになります。
Zend_Controller_Action::getRequest()でリクエストオブジェクトを取得でき、リクエストオブジェクトを通じてコントローラ名やアクション名、リクエストパラメータなどにアクセスできます。
この場合はコントローラ名は'index'、アクション名も'index'になります。
また、コントローラよりさらに大きい単位でモジュールという区分けができるのですが、そこは触っていないのでデフォルトの'default'になります。
IndexController::indexAction()内で実行したところで全く意味のないメソッドですが、そのうち役に立つことが出てくるでしょう、たぶん。
重要なのが最後のgetParam()とgetParams()です。
getParam('a')でリクエストパラメータaの中身、即ち'b'が取得できます。
getParams()は全てのリクエストパラメータを配列で取得します。
他にもリクエストメソッドとかisXmlHttpRequest()とかあるみたいですが、まだ使わないのでパス。
ディスパッチもちょっとだけ。
_forward()メソッドで別のコントローラ、アクションを実行しなおすことができます。
http://zend.localhost/index/hoge/を指定したかのようにhogeActionが実行されapplication/views/scripts/index/hoge.phtmlが表示されます。
ただしリクエストオブジェクトの中身は'index'コントローラ、'index'アクションのままで変更されず、リクエストパラメータもそのまま引き継がれます。
入力確認画面で入力チェックに引っかかったら入力画面に戻す、といった使い方になるのでしょう。
最後に開いたURLはhttp://zend.localhost/index/indexでした。
最初のindexはindexコントローラを呼び出すという意味で、後ろのindexはコントローラ内のindexアクションを呼び出すという意味です。
結果としてIndexController.php内のIndexController::indexAction()が呼び出されます。
同様に例えばhttp://zend.localhost/hoge/fugaだったら、HogeController.php内のHogeController::fugaAction()が呼び出されるということになります。
http://zend.localhost/だけでもHello, World!が表示されますが、これはコントローラ名やアクション名が省かれた場合はindexとして扱われるためです。
http://framework.zend.com/manual/1.11/ja/zend.controller.quickstart.html#zend.controller.quickstart.go.controller
特に指定しないかぎりビューについてもファイルが自動的に決定され、application/views/scripts/コントローラ名/アクション名.phtmlになります。
URLがhttp://zend.localhost/hoge/fugaであればapplication/views/scripts/hoge/fuga.phtmlです。
そのscriptsってなんだよ。
さて、試しにhttp://zend.localhost/index/aってするとFatal errorが発生します。
IndexController::aAction()が存在しないためです。
このようなエラーをまとめて捕捉できる仕組みが用意されており、エラーコントローラと呼ばれています。
application/controllers/ErrorController.php
<?php
class ErrorController extends Zend_Controller_Action{
public function errorAction(){}
}
application/views/scripts/error/error.phtml<html><body>なんかエラー</body></html>例外が発生するとErrorController::errorAction()が呼ばれ、error/error.phtmlが表示されます。
現在はただのダミーですが、errorAction()内で原因を取得したりといったこともできます。
ただこれを実装すると、うっかり例外が出てしまったときにエラーコントローラに奪われてしまってvar_dump()などが効かなくなるので、開発時はオフにしておきましょう。
その後はフロントコントローラとか標準のルータとかが色々書いてあるんだけど何に使うのかよくわからんのでとりあえずスルー。
リクエストオブジェクトだけは大事なのでやっておきます。
といってもまあ単に$_REQUESTを取得するってだけですが。
class IndexController extends Zend_Controller_Action { public function indexAction() { $request = $this->getRequest(); $moduleName = $request->getModuleName(); $controllerName = $request->getControllerName(); $actionName = $request->getActionName(); $params = $request->getParams(); $request['a'] = $request->getParam('a'); } }適当にリクエストパラメータ付きでURLを呼び出してみます。
http://zend.localhost/index/index/?a=b&c=d
http://zend.localhost/index/index/a/b/c/d
両方とも同じ意味になり、indexコントローラのindexアクションを呼び、リクエストパラメータaの値が'b'、cの値が'd'という呼び出しになります。
Zend_Controller_Action::getRequest()でリクエストオブジェクトを取得でき、リクエストオブジェクトを通じてコントローラ名やアクション名、リクエストパラメータなどにアクセスできます。
この場合はコントローラ名は'index'、アクション名も'index'になります。
また、コントローラよりさらに大きい単位でモジュールという区分けができるのですが、そこは触っていないのでデフォルトの'default'になります。
IndexController::indexAction()内で実行したところで全く意味のないメソッドですが、そのうち役に立つことが出てくるでしょう、たぶん。
重要なのが最後のgetParam()とgetParams()です。
getParam('a')でリクエストパラメータaの中身、即ち'b'が取得できます。
getParams()は全てのリクエストパラメータを配列で取得します。
他にもリクエストメソッドとかisXmlHttpRequest()とかあるみたいですが、まだ使わないのでパス。
ディスパッチもちょっとだけ。
_forward()メソッドで別のコントローラ、アクションを実行しなおすことができます。
<?php class IndexController extends Zend_Controller_Action{ public function indexAction(){ $this->_forward('hoge', null, null, array('e'=>'f')); } public function hogeAction(){ var_dump($this->getRequest()->getParams()); } }
http://zend.localhost/index/hoge/を指定したかのようにhogeActionが実行されapplication/views/scripts/index/hoge.phtmlが表示されます。
ただしリクエストオブジェクトの中身は'index'コントローラ、'index'アクションのままで変更されず、リクエストパラメータもそのまま引き継がれます。
入力確認画面で入力チェックに引っかかったら入力画面に戻す、といった使い方になるのでしょう。
PR
トラックバック
トラックバックURL: