7

我目前正在使用 Zend Framework 为网站构建一个小型管理部分,这只是我第二次使用该框架,所以我对某些事情有点不确定。例如,我是否有新闻文章的存档选项,用户希望在其中单击链接并且文章将被存档,但是我无法弄清楚如何在没有视图的情况下运行它?

这是我的控制器

public function archiveNewsAction()
{

    //die(var_dump($this->_request->getParam('news_id')));
    $oNews = new news();
    $this->_request->getParam('news_id');
    $oNews->archiveNewsArticle($news_id);
    //die(var_dump($oNews));
    $this->_redirect('/admin/list-all');
}

这是我的模型

public function archiveNewsArticle($news_id)
{
    //die($news_id);
    $db = Zend_Registry::get('db');
    $sql = "UPDATE $this->_name SET live = '0' WHERE news_id = '$news_id' LIMIT 1";
    die($sql);
    $query = $db->query($sql);
    $row = $query->fetch();

    return $row;
}

我将不胜感激任何人可以提供的任何帮助。

谢谢

西科

4

4 回答 4

21

我将它用于对仅 AJAX 操作的调用,这些操作我要么不想输出,要么正在使用其他输出,例如 XML 或 JSON:

// Disable the main layout renderer
$this->_helper->layout->disableLayout();
// Do not even attempt to render a view
$this->_helper->viewRenderer->setNoRender(true);

如果您正在做的事情没有输出/非 HTML 输出,这具有没有重定向开销的额外好处。

于 2009-02-07T15:07:48.277 回答
5

要在一个动作中禁用视图渲染(把它放在特定的动作中。如果你想要整个控制器把它放在 init 方法中):

$this->_helper->viewRenderer->setNoRender();

如果您使用的是 ZF 的布局组件,请添加以下内容:

$this->_helper->layout->disableLayout();
于 2009-02-07T18:19:01.573 回答
3

我无法在那里弄清楚你的代码。在您的模型中,您正在调用 die()。为什么?它将停止执行。你确定那条线吗?无论如何,如果您在 Zend Framework 中有一个控制器并且不需要任何视图,您可以通过以下行关闭视图:

// code in your controller
$this->_helper->viewRenderer->setNoRender(true);
// the rest of the controller

现在控制器不会搜索要显示给用户的视图脚本。确保你会打电话

$this->_redirect() 

完成所有控制器工作后。

于 2009-02-07T19:50:38.113 回答
0

原答案:

您致电:

$this->_redirect();

调用 Redirector 操作助手,它(除非您已将其配置为不这样做)将在写入标题后立即自动退出脚本,因此永远不会调用或呈现视图,不需要视图脚本。


后续回答:

为了在不将用户发送到另一个“页面”的情况下调用该操作,然后再次重定向回来,您需要使用 XMLHttpRequest (AJAX) 调用。这些链接应提供您需要的信息:

http://developer.mozilla.org/en/AJAX
http://www.ibm.com/developerworks/xml/library/wa-ajaxintro1.html
http://www.oracle.com/technology/pub/articles/沙尔克-ajax.html

还可以看看一些让 XMLHttpRequest 跨浏览器更容易使用的 JS 框架:

http://www.prototypejs.org/
http://mootools.net/

Zend Framework 实际上已经内置了对 Dojo JS 框架的支持,您可能会发现它更简单:

http://framework.zend.com/manual/en/zend.dojo.html
http://www.dojotoolkit.org/

于 2009-02-07T14:09:29.050 回答