カスタムルートを考え出そうとして、Zendフレームワーク1.12を使用しています。
Facebook のプロフィール URL ( http://facebook.com/username )のようなものを作成しようとしています。だから、最初に私はそのようなことを試しました:
$router->addRoute(
'eventName',
new Zend_Controller_Router_Route(
'/:eventName',
array(
'module' => 'default',
'controller' => 'event',
'action' => 'detail'
)
)
);
mydomain.com/something を実行しようとするたびに、次のエラーが発生し続けました。
致命的なエラー: 336 行目の /var/desenvolvimento/padroes/zf/ZendFramework-1.12.0/library/Zend/Controller/Plugin/Broker.php のメッセージ「eventName is not specified」を含む例外「Zend_Controller_Router_Exception」をキャッチできませんでした
そのコードを機能させることができなかっただけでなく、すべてのデフォルト ルートが (明らかに) 上書きされていました。したがって、たとえば、「mydomain.com/admin」のようなものがあり、インデックスコントローラーの「admin」モジュールに送信されますが、同じエラーが返されました (/: と同じパターンに陥ったため)。イベント名)。
私がする必要があるのは、デフォルトのものを上書きせずに、実際に動作することなく、このカスタムルートを作成することです (dûh)。
私はすでにオンラインドキュメントとGoogleの多くの(A LOT)ものをチェックしましたが、私が得ているエラーやデフォルトルートを上書きしない方法に関連するものは何も見つかりませんでした. 私を正しい方向に向けてくれるものは何でもありがたいです。
ありがとう。
EDIT¹:なんとか機能させましたが、ルーティングはまったく使用しませんでした。次のプラグインを作成しました。
public function preDispatch(\Zend_Controller_Request_Abstract $request) {
if (!\Zend_Controller_Front::getInstance()->getDispatcher()->isDispatchable($request)) {
$request->setModuleName($this->_eventRouter["module"]);
$request->setControllerName($this->_eventRouter["controller"]);
$request->setActionName($this->_eventRouter["action"]);
}
}
しかし、それは醜い回避策のように感じます... Tim Fountainが指摘したように、私のイベントは動的 (データベースからロードする) なので、ハードコードすることはできません。また、現在の実装では、すべてのモジュール/コントローラー/アクションの組み合わせをハードコーディングする必要がありません。
プラグインの使用を避ける方法があれば知りたいです。
EDIT²: 私はもうそのくだらないプラグインのことをしていません。ルーターエラーの原因がわかりました。ルーティング定義に、変数 'eventName' の有効なデフォルト値がありませんでした。私の修正は次のとおりです。
$router->addRoute(
'eventName',
new Zend_Controller_Router_Route(
'/:eventName',
array(
'module' => 'default',
'controller' => 'event',
'action' => 'detail',
'eventName' => ''
)
)
);
/adminや/:eventNameなどの「競合する」パターンでルートを作成することはまだできません。/adminが/:eventNameを上書きする方法があれば...