Zend 謹製の PHP 用フレームワーク
- Zend、Zend Frameworkプレビュー版配布開始 (2006-03-06)
- yohgaki's blog / 2006/04/16 Zend Frameworkの参考URL
- いしなお! [Zend Framework (2006年 3月)]
- ぺんたん info / Zend Framework
/~user/somewhere/module/controller/action というリンクが出来ないので
/~user/somewhere/index.php/module/controller/action というリンクにする必要がある。
dispatch 前に BaseUrl に $_SERVER["SCRIPT_NAME"] を食わせておくと良い。
/~user/somewhere/index.php/module/controller/action というリンクにする必要がある。
dispatch 前に BaseUrl に $_SERVER["SCRIPT_NAME"] を食わせておくと良い。
$frontController = Zend_Controller_Front::getInstance(); $frontController->setRouter(new Zend_Controller_Router_Rewrite())->setBaseUrl($_SERVER["SCRIPT_NAME"]); unset($frontController);
$this->_helper->url() は Zend_Controller_Action_Helper_Url::direct()
$this->_helper->url->url() は Zend_Controller_Action_Helper_Url::url()
前者を使うと document root へ飛ばされてしまう。
/~user/somewhere/ 以下への配置も考えれば後者を使うべき。
引数が異なるので注意。
# 1.7 系では修正されたようなので $this->_helper->url() で OK
$this->_helper->url->url() は Zend_Controller_Action_Helper_Url::url()
前者を使うと document root へ飛ばされてしまう。
/~user/somewhere/ 以下への配置も考えれば後者を使うべき。
引数が異なるので注意。
# 1.7 系では修正されたようなので $this->_helper->url() で OK
view script で
$this->dojo()->setDjConfigOption("locale", call_user_func(array(new Zend_Locale(), "toString")));
のようにしとくと、ブラウザに合わせてくれるので吉。
日本語に固定したいなら "ja-jp" を決め打ちしておく。
$this->dojo()->setDjConfigOption("locale", "ja-jp");
$this->dojo()->setDjConfigOption("locale", call_user_func(array(new Zend_Locale(), "toString")));
のようにしとくと、ブラウザに合わせてくれるので吉。
日本語に固定したいなら "ja-jp" を決め打ちしておく。
$this->dojo()->setDjConfigOption("locale", "ja-jp");
例えばカレンダーなら
dojo.requireLocalization("dojo.cldr", "gregorian", "en-us");
のようにすれば en-us のリソースが追加で読み込まれる。
function でくくって Dojo view helper の addOnLoad() 辺りに食わせとくのも手。
$this->dojo()->addOnLoad('function(){dojo.requireLocalization("dojo.cldr", "gregorian", "en-us");}');
dojo.requireLocalization("dojo.cldr", "gregorian", "en-us");
のようにすれば en-us のリソースが追加で読み込まれる。
function でくくって Dojo view helper の addOnLoad() 辺りに食わせとくのも手。
$this->dojo()->addOnLoad('function(){dojo.requireLocalization("dojo.cldr", "gregorian", "en-us");}');
BOM 付きは要注意。
内部コーディングが UNICODE じゃないのに、BOM 付き UNICODE でソース書いてたりすると、レスポンスヘッダいじくろうとした時に意味不明に headers already sent とか、まるで何かの呪いかと orz
内部コーディングが UNICODE じゃないのに、BOM 付き UNICODE でソース書いてたりすると、レスポンスヘッダいじくろうとした時に意味不明に headers already sent とか、まるで何かの呪いかと orz
公式マニュアルの「独自のコンテキスト作成」には余り詳しく書いてないので、
ZendFramework/library/Zend/Controller/Action/Helper/ContextSwitch.php#__construct()
を参照し json と xml を addContext() してる部分を参考にすると良い。
簡単にやるには Zend_Controller_Action のサブクラスで init() する時に addContext() しておけば良いのだが、Zend_View_Helper_Action などで、view の中に別の action を埋め込んだりする事がある場合、登録済みのコンテキストを再度 addContext() してしまうので例外が発生してしまい具合が悪い。
例えば CSV コンテキストの追加を BootStrap.php でやらせるには次のようにすれば良い。
参考:
ZendFramework/library/Zend/Controller/Action/Helper/ContextSwitch.php#__construct()
を参照し json と xml を addContext() してる部分を参考にすると良い。
簡単にやるには Zend_Controller_Action のサブクラスで init() する時に addContext() しておけば良いのだが、Zend_View_Helper_Action などで、view の中に別の action を埋め込んだりする事がある場合、登録済みのコンテキストを再度 addContext() してしまうので例外が発生してしまい具合が悪い。
例えば CSV コンテキストの追加を BootStrap.php でやらせるには次のようにすれば良い。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initCsvContext() { Zend_Controller_Action_HelperBroker::getStaticHelper('ContextSwitch') ->addContext("csv", array( "suffix" => "csv", "headers" => array("Content-Type" => "text/csv"), )); } }コンテキストスイッチを有効にするには Zend_Controller_Action のサブクラスの初期化時に以下のようにする。
class FooController extends Zend_Controller_Action { public $contexts = array( "bar" => array("csv"), ); public function init() { $this->_helper->contextSwitch()->initContext(); } public function barAction() { $this->view->hoge = array(/* view にデータを渡す */); } }あとは format パラメータにコンテキスト名(今の場合 csv)を与えて action をコールすればビューとして application/views/scripts/foo/bar.csv.phtml が呼ばれるので適当にレンダリングすれば良い。
参考:
タグ
コメントをかく