Php Zend框架:在索引视图中包含其他控制器

Php Zend框架:在索引视图中包含其他控制器,php,zend-framework,zend-feed,Php,Zend Framework,Zend Feed,我是Zend FW的新手。我希望在名为Feedparsercontroller's indexAction的控制器中编写一个简单的feedparser。但是我想在我的索引页面上将解析后的提要输出显示为一个小部件。如何将输出/变量数据驱动到indexview 下面是我的解析器 class FeedparserController extends Zend_Controller_Action { public function init() { /* Initialize action c

我是Zend FW的新手。我希望在名为Feedparsercontroller's indexAction的控制器中编写一个简单的feedparser。但是我想在我的索引页面上将解析后的提要输出显示为一个小部件。如何将输出/变量数据驱动到indexview

下面是我的解析器

class FeedparserController extends Zend_Controller_Action {

public function init() {
    /* Initialize action controller here */
}

public function indexAction() {

    $feedUrl = 'http://feeds.feedburner.com/ZendScreencastsVideoTutorialsAboutTheZendPhpFrameworkForDesktop';
    $feed = Zend_Feed_Reader::import ( $feedUrl );

    $this->view->gettingStarted = array ();
    foreach ( $feed as $entry ) {
        if (array_search ( 'Getting Started', $entry->getCategories ()->getValues () )) {
            $this->view->gettingStarted [$entry->getLink ()] = $entry->getTitle ();
        }
    }
}

}

我想在登录时实现同样的功能,同时注册控制器。

也许我没有完全理解您的问题

但是,这里最好的方法似乎是创建一个单独的提要控制器,该控制器只负责与提要相关联的业务逻辑(检索、按摩、设置为查看等)

然后,创建一个包含javascript代码的部分,以调用提要控制器,然后输出所需的小部件。这在一些方面做得很好

  • 它集中了与提要相关的逻辑
  • 它允许您将提要小部件放在任何需要的地方
  • 这是一种SOA方法,通常是一件好事

  • 希望这有帮助

    视图辅助对象怎么样


    您可以阅读它

    我认为小部件的最佳逻辑是ajax

    使用一些jswidgets库(例如jqueryui),然后通过一些ajax查询加载这些widgets,返回HTML,这也允许简单的widgets重新加载behvious(无需重新编辑整个页面)

    在服务器端,您需要允许通过ajax请求调用控制器/操作,并且只发送html片段(而不是包含所有布局的整个页面)

    要执行此操作,请检查操作帮助程序。您将告诉FeedparserController,可以在xmlhhtprequest中使用/format/html调用index操作,在这种情况下,视图助手将是index

    在init部分,您会说可以在ajax模式下调用indexAction,呈现html片段(“html”):

    现在只需将视图脚本
    feedparser/index.phtml
    重命名为
    feedparser/index.ajax.phtml

    在indexAction中,在视图脚本上完成您的工作并输出您想要的内容,不要考虑布局组合问题,您正在单独处理自己的布局部分,而组合是在js端完成的

    在javascript部分,确保您通过ajax(可能是带jQuery的$.load或$.ajax)调用添加了format/html作为参数的url(so)


    请注意,在我看来,您应该使用json响应,而不是html,也许json中应该包含一些html。但这取决于您希望如何控制ajax通信(以及如何处理错误、重定向等,这是另一个主题)。

    如果您不想通过url调用这些控制器,而只希望它们是小部件,则无需将这些内容放入控制器中。只需编写自己的域对象并将其包含在视图中。您好,感谢您的回复,我想在不同的控制器中使用它,因为我想重用解析器,比如说作为cron作业运行以从提要获取结果,在将来。所以我想用它作为一个不同的控制器,将数据路由到索引视图谢谢你的回复,我有同样的想法,使用Ajax,但是有没有什么“常用”的方法来保证它的安全,我的意思是,我将解析提要并应用我的算法从提要中获取有用的项目,然后将它放到一个页面上,比如mysite.com/feedparser/jsonview,如何使用Zend.Hi-Eswar保护它免受远程调用,一般来说,这种保护是系统防火墙的工作,而不是应用程序本身。如果您正在进行AJAX调用,那么所有对控制器的调用都将来自外部,当然,除非这是一个内部应用程序。非常感谢您的回复。非常感谢您的回复,我也有相同的想法,使用AJAX,但是有没有“常用”的方法来确保它的安全,我的意思是,我将解析提要并应用我的算法从提要中获取有用的项目,然后将其放到一个页面上,比如mysite.com/feedparser/jsonview,如何使用Zend保护它免受远程调用。@Eswar Rajesh Pinapala:这是另一个问题:-)检查示例感谢您的回复。谢谢,我是Zend Framework的新手,我将详细阅读有关助手的信息,看看它是否有帮助。
    $Ajaxcontext = $this->_helper->getHelper('AjaxContext');
    $Ajaxcontext->addActionContext('index', 'html')
                ->initContext();