当前位置:  开发笔记 > 编程语言 > 正文

Zend Framework中的通用,全能行动......可以做到吗?

如何解决《ZendFramework中的通用,全能行动可以做到吗?》经验,为你挑选了1个好方法。

这种情况源于想要在其网站中创建自己的"页面"而无需创建相应操作的人.

所以说他们有像mysite.com/index/books这样的网址...他们希望能够创建mysite.com/index/booksmore或mysite.com/index/pancakes但不必在索引控制器中创建任何操作.他们(可以做简单html的非技术人员)基本上想要创建一个简单的静态页面,而不必使用动作.

就像在索引控制器中会有一些通用操作来处理对不存在的操作的请求.你是怎么做到的,甚至是可能的?

编辑:使用__call的一个问题是缺少视图文件.缺少一个动作变得毫无意义,但现在你必须处理丢失的视图文件.如果它找不到一个框架将抛出​​一个异常(虽然如果有一种方法可以让它在缺少的视图文件上重定向到404 __call是可行的.)



1> Ludwig..:

使用魔术__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);
    }
}

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有