Zend::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
echo 'IndexController::indexAction()';
}
}
?>
IndexController类处理控制器为index的请求或者指定的控制器不存在的请求,就像刚才所说的。
indexAction()方法将处理动作为index的请求。记住无论是控制器还是动作,默认的值都是index,前面
也说过了。如果尝试请求/、/index或者/index/index,都会执行indexAction()方法(结尾的斜杠不会
改变这种行为)。对任何其他资源的请求都可能会产生错误。
继续之前还要为IndexController添加一个很有用的方法noRouteAction()。一旦请求某个控制器且其不
存在时便调用noRouteAction()方法。例如,请求/foo/bar时,如果FooController.php不存在,那么就
会执行noRouteAction()。不过,/index/foo的请求还是会产生错误,因为这里foo是一个动作,而非控
制器。
在IndexController中添加 noRouteAction() :
清单10
Zend::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
echo 'IndexController::indexAction()';
}
public function noRouteAction()
{
$this->_redirect('/');
}
}
?>
这个例子使用了 $this->_redirect('/') 来描述可以在noRouteAction()中一般可能出现的动作。这
可令对不存在的控制器的请求被重定向到根文档(首页)。
现在来创建 FooController.php:
清单11
Zend::loadClass('Zend_Controller_Action');
class FooController extends Zend_Controller_Action
{
public function indexAction()
{
echo 'FooController::indexAction()';
}
public function barAction()
{
echo 'FooController::barAction()';
}
}
?>
如果你再请求 /foo/bar,就应该看到执行了barAction(),因为请求的动作是bar。这样不仅可以支持
友好的URL,同时也可以用极少的代码就可以很好得进行组织。酷啊!
还可以创建一个__call()方法来处理未定义的动作的请求,如 /foo/baz: