Как правильно вызвать контроллер / действие в 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] => Действие «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 в этом сценарии.

1

Решение

С базовой структурой потребуется время и усилия, чтобы сделать это, но это может быть сделано

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 /)’ в

Надеюсь, это поможет, но все же я буду рекомендовать использовать структуру модуля.

2

Другие решения

Если ‘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();
1

По вопросам рекламы [email protected]