在Zend Framework中的控制器中使用视图助手

19

我有一个通过AJAX调用的控制器(发送JSON数据),因此我不使用视图。

我需要在控制器中使用个人的视图助手来格式化我的数据。

这是否可行?

或者也许我做错了(也许我应该使用视图,但是如何使用JSON)?

5个回答

45

你可以通过以下方式从控制器访问任何ViewHelper:

$this->view->helpername(/*params*/);
// or
$helper = $this->view->getHelper('helpername');
// or
$broker = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$broker->getView()->helpername(/*params*/);
请参见Zend:如何在控制器中使用视图助手中的自定义函数?。但是,您可能是正确的,您正在错误地做事情(顺便说一句,这很有趣),但是我无法从您的问题中真正得出结论。请进一步说明为什么需要调用视图助手以及它应该格式化什么。

是的,我怎么会忘记了!我感觉很蠢,但谢谢你。针对“这样做是否正确”的问题:视图助手用于格式化日期、数字等... 我该怎么做不同?(我无法使用JavaScript实现) - Matthieu Napoli
@Matthieu 哦,我明白了。在这种情况下,我认为ViewHelper听起来不错。 - Gordon
我尝试使用第三个选项,但是出现了“Call to undefined method Zend_Controller_Action_Helper_ViewRenderer::getView()”的错误,我在一个被控制器调用的自定义类中。 - max4ever
2
我发现在Bootstrap中有一个名为_initView的函数,它返回$view。然后使用这个$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view'); - max4ever

5
Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');

请确保返回的视图是您想要的视图。因为在后续流程中,视图可能会被覆盖,并且在控制器上您将拥有一个全新的视图。

在操作助手和类似工具上设置的所有值...在控制器启动之前?都随风而逝了!

因此,在假设您获得了视图资源之前,请进行测试以确保它确实是您期望的相同视图资源,以及所有变量仍然存在。

您可能会像我一样感到惊讶!


3
你可以创建 Helper 的实例,这将在控制器、模型以及任何需要 Helper 的地方使用。
例如:
// create Instance   
$serverUrl_helper = new Zend_View_Helper_ServerUrl();

// get the ServerUrl
$serverUrl = $serverUrl_helper->serverUrl();

1
这是正确的,虽然不是最好的解决方案。 - Matthieu Napoli
@Matthieu,你有更好的在模型中使用帮助程序的方法吗? - Danilo
你真的会在模型中使用视图助手吗? - Matthieu Napoli

1

0

只需使用操作助手,许多视图助手也可以作为操作助手使用。

或直接使用Zend_Datesprintf


我说:“我需要使用一个个人视图助手”。 - Matthieu Napoli
是的,但我关心Zend Framework架构,我花了几个月的时间理解它并创建视图助手,不想通过覆盖“helper”概念并直接调用类甚至更糟的是使用sprintf格式化我的数字和日期来破坏它。 - Matthieu Napoli
你还说,“我不使用视图”。你的意思是你不使用Zend_View.phtml视图脚本吗?$this->view->_helper;很明显...谁知道什么是“个人视图助手” :) - takeshin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接