Zend Frameworkに関するいくつかの質問があります。私は現在デフォルトのdisplayAction()
メソッドを使用してデフォルトのコントローラにすべての静的ページをルーティングしようとしています。その目的は、page
paramを見て、スクリプトページが存在するかどうかを判断し、そうでなければ404ページが見つかりませんエラーを表示して、ビューをレンダリングするかどうかを決定することです。さらに、paramと同じ名前のメソッドが存在するかどうかを調べるテストが行われます。存在する場合は、そのアクションを呼び出します。ここに記載されているUpdated:Zend Frameworkの静的コンテンツを管理するためのベストプラクティス?
ここのapplication.ini
resources.router.routes.static-pages.route = /:page
resources.router.routes.static-pages.defaults.module = default
resources.router.routes.static-pages.defaults.controller = index
resources.router.routes.static-pages.defaults.action = display
からのルーティング設定は、コントローラのアクションです:
今public function someAction() {
// do something
}
public function displayAction() {
// extract page param, e.g. 'some'
$page = $this->getRequest()->getParam('page');
// create zend styled action method, e.g. 'someAction'
$page_action = $page.'Action';
// if a method within this controller exists, call on it
if (method_exists($this, $page_action)) {
$this->$page_action();
}
// if nothing was passed in page param, set to 'home'
if (empty($page)) {
$page = 'home';
}
// if script exists, render, otherwise, throw exception.
if (file_exists($this->view->getScriptPath(null)."/".$this->getRequest()->getControllerName()."/$page.".$this->viewSuffix)) {
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
、ここに私の質問は以下のとおりです。のより良い方法はありますこれをする?私はこのフレームワークには比較的新しいので、適用されるベストプラクティスはありますか?コントローラ内からアクションを呼び出すより良い方法はありますか?私はドキュメンテーションを通して多くのことを見てきましたが、それのかなりの部分はそれ自身と矛盾しているようです。
アップデート1:
考え、読み取りを持った後、私は解決策を簡素化するために管理し、記載されたいくつかのことを含めました。注:私はPagesController
をデフォルトの静的コンテンツコントローラとして使用します。
ここでは、application.iniのルーティング設定を示します。ホームページへの呼び出し、つまり「/」は、action
パラメータとして「home」を渡し、他のすべてのリクエストについては、ユーザ定義/ URLリンクパラメータはaction
で送信されます。
ここではコントローラの動作を示します。ユーザー定義のパラメータがアクションとして存在する場合は、それが呼び出されます。それ以外の場合は、PHPの魔法の関数__callに渡されます。
public function someAction()
{
// Do something
}
public function __call($method, $args)
{
// extract action param, e.g. "home"
$page = $title = $this->getRequest()->getParam('action');
// test if script exists
if (file_exists($this->view->getScriptPath(null) . "/"
. $this->getRequest()->getControllerName() . "/$page . " . $this->viewSuffix))
{
// pass title to layout
$this->view->assign(compact('title'));
// render script
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
これは機能します。そこで、私の質問は次のとおりです。このメソッドを静的コンテンツの管理に使用することを標準化することを検討しますか?そうでない場合は、どうしてですか?どのように改善しますか?また、これはGETリクエストであると考えて、Zend_Filter_inputを使用して入力を浄化するのは賢明ですか?
フィードバックいただきありがとうございます、私は間違いなくこれを見ていきます。 – Hegemon