如何在 Zend Framework 1 中正确调用 controller/action?
How to properly call controller/action in Zend Framework 1?
我在 Zend Framework 1 应用程序中有以下目录结构:
application/
├── controllers/
│ └── admin/
│ └── TaxRateController.php
│ └── MainInitController.php
我正在尝试访问 taxrate
,它应该是 indexAction()
,但是我做错了,因为我得到了 Zend_Controller_Action_Exception
。到目前为止,这是我尝试过的所有 URL 组合:
http://localhos/admin/tax-rate/index
http://localhos/admin/tax-rate
http://localhos/admin/taxrate
http://localhos/admin/taxrate/index
并且它们都产生相同的错误:
[message:protected] => Action "taxRate" does not exist and was not
trapped in __call()
这是class(es)的内容:
class TaxRateController extends MainInitController
{
public function indexAction()
{
echo 'I am here'; die();
}
}
class MainInitController extends Zend_Controller_Action {
....
}
我在这里缺少什么?我应该如何调用 controller/action
?
更新 1:
我试图将目录移到 controllers
之外,但结果是一样的:
application/
│ └── admin/
│ └── TaxRateController.php
├── controllers/
│ └── MainInitController.php
在这种情况下我打电话给 http://localhost/admin/taxrate
。
如果 '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();
有了基本的结构,要做到这一点需要时间和精力,但可以做到
application/
├── controllers
│ └── admin
│ └── TaxRateController.php
您需要为 bootstrap 子目录下的每个控制器创建路由:
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 找不到你的视图目录。您需要将所有管理视图移动到管理子目录,否则它会抛出类似于此的错误。
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'admin/tax-rate/action.phtml' not found in path (application/views/scripts/)' in
希望这对您有所帮助,但我仍然会推荐使用模块结构。
我在 Zend Framework 1 应用程序中有以下目录结构:
application/
├── controllers/
│ └── admin/
│ └── TaxRateController.php
│ └── MainInitController.php
我正在尝试访问 taxrate
,它应该是 indexAction()
,但是我做错了,因为我得到了 Zend_Controller_Action_Exception
。到目前为止,这是我尝试过的所有 URL 组合:
http://localhos/admin/tax-rate/index
http://localhos/admin/tax-rate
http://localhos/admin/taxrate
http://localhos/admin/taxrate/index
并且它们都产生相同的错误:
[message:protected] => Action "taxRate" does not exist and was not trapped in __call()
这是class(es)的内容:
class TaxRateController extends MainInitController
{
public function indexAction()
{
echo 'I am here'; die();
}
}
class MainInitController extends Zend_Controller_Action {
....
}
我在这里缺少什么?我应该如何调用 controller/action
?
更新 1:
我试图将目录移到 controllers
之外,但结果是一样的:
application/
│ └── admin/
│ └── TaxRateController.php
├── controllers/
│ └── MainInitController.php
在这种情况下我打电话给 http://localhost/admin/taxrate
。
如果 '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();
有了基本的结构,要做到这一点需要时间和精力,但可以做到
application/
├── controllers
│ └── admin
│ └── TaxRateController.php
您需要为 bootstrap 子目录下的每个控制器创建路由:
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 找不到你的视图目录。您需要将所有管理视图移动到管理子目录,否则它会抛出类似于此的错误。
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'admin/tax-rate/action.phtml' not found in path (application/views/scripts/)' in
希望这对您有所帮助,但我仍然会推荐使用模块结构。