$ this->动作从控制器显示某个动作 - ZEND

时间:2012-09-05 23:50:44

标签: php zend-framework zend-form zend-db

我正在尝试为我的网站构建一个我用ZEND构建的菜单。我是ZEND的新手。 所以,我在控制器中创建了一个名为BlogCateogoriesController的动作catmenuAction()。我也为它创建了一个veiw脚本。

现在在master.phtml文件中,我试图调用此视图脚本来呈现我的菜单。实际上我认为这就是我将最新消息,评论,推文带到我的网页上的方式(Joomla中lika MODULES的方式)。

在我的master.phtml文件中,我声明了

<?php $this->layout()->categoriesList = $this->action('catmenu', 'Blog_BlogCategories'); ?>

现在我收到这个可怕的错误,说它无法找到Blog_BlogCategoriesController:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (Blog_BlogCategories)' in D:\Server\xampp\htdocs\zendtest\library\Zend\Controller\Dispatcher\Standard.php:248 Stack trace: #0 D:\Server\xampp\htdocs\zendtest\library\Zend\View\Helper\Action.php(135): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 [internal function]: Zend_View_Helper_Action->action('catmenu', 'Blog_BlogCatego...') #2 D:\Server\xampp\htdocs\zendtest\library\Zend\View\Abstract.php(350): call_user_func_array(Array, Array) #3 [internal function]: Zend_View_Abstract->__call('action', Array) #4 D:\Server\xampp\htdocs\zendtest\application\layouts\master.phtml(20): Zend_View->action('catmenu', 'Blog_BlogCatego...') #5 D:\Server\xampp\htdocs\zendtest\library\Zend\View.php(108): include('D:\Server\xampp...') #6 D:\Server\xampp\htdocs\zendtest\library\Zend\View\Abstract.php(888): Zend_View->_run('D:\Server\xampp...') #7 D:\Ser in D:\Server\xampp\htdocs\zendtest\library\Zend\Controller\Plugin\Broker.php on line 336

请帮帮我!!!

2 个答案:

答案 0 :(得分:3)

Zend_View_Helper_Action的语法是:

action( string $action, string $controller, string $module = null, array $params = array() ) : string

所以你打电话的地方:

$this->action('catmenu', 'Blog_BlogCategories');

我假设您在“博客”模块中有一个类Blog_BlogCategoriesController。您需要致电:

$this->action('catmenu', 'BlogCategories', 'Blog');

答案 1 :(得分:2)

根据我的理解,我试过在下面制作一个脚本。你已经使用了master.phtml文件,你必须提到它所在的位置以及它与问题的关系。使用这些http://framework.zend.com/manual/en/zend.tool.framework.clitool.html 命令行创建项目然后模块然后控制器和布局。

下面解释其余部分(希望这有帮助)

applicaiton
  -config
  -controller
    -IndexController.php
  -forms
  -layouts
    -scripts
      -layout.phtml
  -models
  -modules
    -Blog
      -contollers
        -IndexController.php
        -CateogoriesController.php
      -models
      -views
        -helpers
    -scripts
      -error
      -index
        -index.phtml
          -cateogories
            -index.php
  -views
    -helpers
    -scripts
      -error
      -index
        -index.phtml
      -partials
        -menu.phtml
  -Bootstrap.php

<强>布局/脚本/ layout.phtml

<?php
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle($this->headtitle);
echo $this->doctype(); 
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
<body>
<!-- loading menu -->
<?php echo $this->partial('partials/menu.phtml', 'default'); ?>
<?php echo $this->layout()->content; ?>
</body>
</html>

这是布局脚本,请注意layout() - &gt;内容将加载您当前的视图文件 所以你不需要在这里任何事情 在这里,我已经调用了部分视图,该视图链接到默认模块的视图

<强>模块/博客/控制器/ CateogoriesController.php

<?php
class Blog_CateogoriesController extends Zend_Controller_Action
{
    public function init()
    {

    }
    //Default function
    public function indexAction()
    {
    }
}

这是Blog_CateogoriesController类的基本结构

<强>模块/博客/视图/脚本/ cateogories / index.phtml

<div class="menu"></div>
<div class="contant"></div>

您的基本页面布局

<强>视图/脚本/分音/ menu.phtml

<!-- menu -->
<ul> <li> </li> <ul>

您的菜单HTML代码