这种情况源于想要在其网站中创建自己的"页面"而无需创建相应操作的人.
所以说他们有像mysite.com/index/books这样的网址...他们希望能够创建mysite.com/index/booksmore或mysite.com/index/pancakes但不必在索引控制器中创建任何操作.他们(可以做简单html的非技术人员)基本上想要创建一个简单的静态页面,而不必使用动作.
就像在索引控制器中会有一些通用操作来处理对不存在的操作的请求.你是怎么做到的,甚至是可能的?
编辑:使用__call的一个问题是缺少视图文件.缺少一个动作变得毫无意义,但现在你必须处理丢失的视图文件.如果它找不到一个框架将抛出一个异常(虽然如果有一种方法可以让它在缺少的视图文件上重定向到404 __call是可行的.)
使用魔术__call
方法可以正常工作,您所要做的就是检查视图文件是否存在并抛出正确的异常(或者如果没有则执行其他操作).
public function __call($methodName, $params) { // An action method is called if ('Action' == substr($methodName, -6)) { $action = substr($methodName, 0, -6); // We want to render scripts in the index directory, right? $script = 'index/' . $action . '.' . $this->viewSuffix; // Script file does not exist, throw exception that will render /error/error.phtml in 404 context if (false === $this->view->getScriptPath($script)) { require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception( sprintf('Page "%s" does not exist.', $action), 404); } $this->renderScript($script); } // no action is called? Let the parent __call handle things. else { parent::__call($methodName, $params); } }