私は最初のZendFrameworkアプリケーションを構築しており、URLからユーザーパラメーターを取得するための最良の方法を見つけたいと思っています。
index
、、およびアクションメソッドadd
を持つコントローラーがいくつかあります。アクションはパラメーターをとることができ、アクションはパラメーターをとることができます。edit
delete
index
page
edit
delete
id
Examples
http://example.com/somecontroller/index/page/1
http://example.com/someController/edit/id/1
http://example.com/otherController/delete/id/1
これまで、アクションメソッドでこれらのパラメータを次のようにフェッチしていました。
class somecontroller extends Zend_Controller_Action
{
public function indexAction()
{
$page = $this->getRequest->getParam('page');
}
}
ただし、同僚から、Zend_Controller_Router_Rewriteを使用したより洗練されたソリューションについて次のように言われました。
$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route(
'somecontroller/index/:page',
array(
'controller' => 'somecontroller',
'action' => 'index'
),
array(
'page' => '\d+'
)
);
$router->addRoute($route);
これは、すべてのコントローラーに対して、少なくとも3つのルートを追加する必要があることを意味します。
- 1つは:pageパラメータを使用した「インデックス」アクション用です
- 1つは:idパラメーターを使用した「編集」アクション用です
- 1つは:idパラメーターを使用した「削除」アクション用です
例として、以下のコードを参照してください。これらは、1つのコントローラーの3つの基本的なアクション方法のみのルートであり、10個以上のコントローラーがあることを想像してください...これが最善の解決策であるとは想像できません。私が見る唯一の利点は、パラメータキーに名前が付けられているため、URLから省略できることです(somecontroller/index/page/1
になりますsomecontroller/index/1
)
// Route for somecontroller::indexAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/index/:page',
array(
'controller' => 'somecontroller',
'action' => 'index'
),
array(
'page' => '\d+'
)
);
$router->addRoute($route);
// Route for somecontroller::editAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/edit/:id',
array(
'controller' => 'somecontroller',
'action' => 'edit'
),
array(
'id' => '\d+'
)
$router->addRoute($route);
// Route for somecontroller::deleteAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/delete/:id',
array(
'controller' => 'somecontroller',
'action' => 'delete'
),
array(
'id' => '\d+'
)
$router->addRoute($route);