如何在Zend Framework 1中正确调用控制器/操作?

时间:2016-12-06 21:59:32

标签: php zend-framework zend-framework-mvc

我在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

2 个答案:

答案 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();