Вы можете проверить наличие ресурса (действия) в acl:
if(!$this->_acl->has($resource) || $this->_acl->isAllowed($role, $resource, $action))
Иначе можно просто отрицать по умолчанию. Если затем вы проверите несуществующее действие, acl вернет false по умолчанию.
Если вы просто хотите определить, вызывается ли несуществующее действие с вашего контроллера, вы можете использовать метод контроллера __call.
Для более конкретного решения вы должны предоставить больше информации, например, о том, где вы выполняете ACL-проверку, как вы настраиваете ACL, ....
Пример для отлова несуществующих действий в вашем контроллере:
My_Controller extends Zend_Controller_Action
{
__call($method, $args)
{
throw new Exception("Action does not exist"); // This is done by default
// Just do whatever you want to do in this function (like redirecting)
}
}
В любом случае это можно сделать с помощью ErrorhandlerPlugin даже без магической функции. Так как вы хотите перенаправить только на страницу с ошибкой, вам просто нужно позаботиться о том, чтобы проверка acl не вызывала никаких исключений, поскольку ресурс (или действие) не найден. В зависимости от того, где вы проводите проверку, у вас есть несколько возможностей сделать это, но при условии, что каждый контроллер - это один ресурс, и вы все добавляете их, это не должно быть проблемой.