Googleで検索したところ、このコードを取得して、コントローラーが存在するかどうかを確認しました。
$front = Zend_Controller_Front::getInstance();
if ($front->getDispatcher()->isDispatchable($request)) {
// Controller exists
}
しかし、このコードをどこに置くべきかわかりません。何$request
ですか?
私はBoostrap.phpにいます。コントローラーが存在しないかどうか_initRoute
を確認する必要があります。存在しない場合は、新しいルートを追加します。
最初の回答後に更新されました。Boostrap.phpにいくつかのルートがあります
public function _initRoute() {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute(
'username',
new Zend_Controller_Router_Route(':username',
array('controller'=>'profile',
'action'=>'index')
)
);
$router->addRoute(
'username/sets',
new Zend_Controller_Router_Route(':username/sets',
array('controller'=>'profile',
'action'=>'sets')
)
);
}
このルートにより、mydomain.com/{username}のコンテンツはmydomain.com/profile/index/username/{username}と同じになります。
しかし、問題は、mydomain.com / {anything or any controller}と入力すると、Boostrapで定義したとおりにルーティングされることです。ですから、コントローラーが存在するかどうかを確認する必要があると思います。存在しない場合は、ルートを実行します。
私が間違っている?最初の回答の後、プラグインを追加し、それを_initPluginの下に置いて登録しました。しかし、それは機能しないように見えます。
これは私のブーストラップファイルです:
<?php
//Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator.phtml');
class Plugin_MyX extends Zend_Controller_Plugin_Abstract {
public function routeStartup(Zend_Controller_Request_Abstract $request) {
$front = Zend_Controller_Front::getInstance();
$dispatcher = $front->getDispatcher();
if (!$dispatcher->isDispatchable($request)) {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute(
'username',
new Zend_Controller_Router_Route(':username',
array('controller'=>'profile',
'action'=>'index')
)
);
$router->addRoute(
'username/sets',
new Zend_Controller_Router_Route(':username/sets',
array('controller'=>'profile',
'action'=>'sets')
)
);
} else {
// exist
}
}
}
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initPlugin() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_MyX());
}
public function _initRoute() {
}
}