У меня есть следующая структура каталогов в приложении 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] => Действие «taxRate» не существует и не было
в ловушке в __call ()
Это содержание класса (ов):
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
в этом сценарии.
С базовой структурой потребуется время и усилия, чтобы сделать это, но это может быть сделано
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’ с сообщением ‘script’ admin / tax-rate / action.phtml ‘не найдено в пути (application / views / scripts /)’ в
Надеюсь, это поможет, но все же я буду рекомендовать использовать структуру модуля.
Если ‘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();