我在Zend Framework 1应用程序中有以下目录结构:
application/
├── controllers/
│ └── admin/
│ └── TaxRateController.php
│ └── MainInitController.php
我正在尝试访问应该taxrate
的{{1}},但是因为我得到indexAction()
而我做错了。这是我到目前为止尝试过所有这些URL组合的内容:
Zend_Controller_Action_Exception
所有这些都会产生同样的错误:
[message:protected] =>行动" taxRate"不存在而不存在 陷入__call()
这是班级的内容:
http://localhos/admin/tax-rate/index
http://localhos/admin/tax-rate
http://localhos/admin/taxrate
http://localhos/admin/taxrate/index
我在这里缺少什么?我该怎么称呼class TaxRateController extends MainInitController
{
public function indexAction()
{
echo 'I am here'; die();
}
}
class MainInitController extends Zend_Controller_Action {
....
}
?
更新1:
我试图将目录移到controller/action
之外,但结果是一样的:
controllers
我在这种情况下称为application/
│ └── admin/
│ └── TaxRateController.php
├── controllers/
│ └── MainInitController.php
。
答案 0 :(得分:2)
基本结构需要花费时间和精力才能完成,但可以完成
application/
├── controllers
│ └── admin
│ └── TaxRateController.php
您需要为引导程序中子目录下的每个控制器创建路由:
public function _initAdminRoute()
$router = Zend_Controller_Front::getInstance()->getRouter();
// structure
$router->addRoute(
'unique_route_name',
new Zend_Controller_Router_Route('/admin/controllerRoute/:action/*',
['controller' => 'subdirName_controllerRoute']
)
);
// Like this
$router->addRoute(
'admin_taxrate_route',
new Zend_Controller_Router_Route('/admin/tax-rate/:action/*', ['controller' => 'admin_tax-rate'])
);
}
在此之后,您需要使用子目录名重命名控制器类以让zend找到它们。但是不要更改控制器文件名。
class TaxRateController => class Admin_TaxRateController
现在您可以使用您的控制器,但您的视图可能需要一些修复,因为现在zend找不到您的视图目录。您需要将所有管理员视图移动到admin子目录,否则会抛出与此类似的错误。
致命错误:未捕获的异常' Zend_View_Exception'邮件'脚本' admin / tax-rate / action.phtml'在路径中找不到(application / views / scripts /)'在
希望这会有所帮助,但我仍然建议使用模块结构。
答案 1 :(得分:1)
如果' admin'是一个模块,你应该使用这样的目录结构:
application/
├── modules
│ └── admin
| └── controllers
│ └── TaxRateController.php
还要确保您的application/configs/application.ini
符合它:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules/"
修改强>
确保您的文件public/index.php
以这样结束:
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();