基本的に、ZF1はURLからの名前のコントローラ/アクションにつながるデフォルトルートを提供します。
あなたはそこに機能を追加することによりapplication/Bootstrap.php
ファイルからカスタムルートを追加することができます。
/**
* This method loads URL routes defined in /application/configs/routes.ini
* @return Zend_Router
*/
protected function _initRouter() {
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$router->addRoute(
'user',
new Zend_Controller_Router_Route('product/:slug', array(
'controller' => 'product',
'action' => 'details',
), array(
'slug' => '[A-Za-z0-9-]+',
))
);
return $router;
}
そして、ここであなたが行きます!
Chrisが説明したように、要求を処理するためにコントローラコードを変更する必要があります。別の解決策は、余分なアクションを使用することです。 (2つの要求の代わりに、1)
final class ProductController
{
public function infoAction()
{
$product = $table->find($this->_param('id'));
$this->view->product = $product;
}
public function detailsAction()
{
$product = $table->fetch(['slug' => $this->_param('slug')]);
$this->forward('info', 'product', [
'id' => $product->id,
]);
}
}
が、それはあまり効率的であるが、あなたは再利用することができます:
final class ProductController
{
public function infoAction()
{
$product = $table->find($this->_param('id'));
$this->view->product = $product;
}
public function detailsAction()
{
$product = $table->fetch(['slug' => $this->_param('slug')]);
$this->view->product = $product;
$this->render('info');
}
}
さて、あなたはinfoAction
の処理の多くを行うと仮定すると、あなたは前進して行くことができますあなたのコード。
あなたの製品テーブルにスラッグを入れて、ルートパラメータに対応するスラッグでラインを取得することができます。あなたはそれを試しましたか? –
私は、get paramsに基づいてブートストラップを行う方法を理解できません。 スラッグは基本的に商品名+日付 –