1

我是相当新的Zend框架和MVC一般,所以我找了一些建议。我们有我们有一些方法来获得一些用户信息,账户配置的基础控制器类等需要帮助搞清楚如何写我的Zend视图助手

所以我用一些方法,写出来的各种控制器操作的代码,但现在我想避免重复此代码,并进一步我想采取此代码以外的控制器和视图助手,因为它主要是输出一些JavaScript。因此,在控制器中的代码应该是这样的:

$obj= new SomeModel ($this->_getModelConfig()); 
$states = $obj->fetchByUser ($this->user->getId()); 
//Fair amount of logic here using this result to prepare some javascript that should be sent to the view... 

的$此 - > _ getModelConfig和$这个 - >用户>的getId()的东西,我可以在控制器做,现在我的问题是什么将这些代码移出控制器后,将这些信息传递给视图助手的最佳方法是什么?

我是否应该打电话控制器这些方法,并将结果保存到视图,并有助手把它捡起来从那里?

我在想的另一个选择是向助手添加一些参数,如果参数通过,那么我将它们存储在助手的属性中并返回,并在不传递参数的情况下调用它执行工作。因此,它应该是这样的:

从控制器:

$this->view->myHelper($this->user->getId(), $this->_getModelConfig()); 

从视图:

<?= $this->myHelper(); %> 

助手:

class Zend_View_Helper_MyHelper extends Zend_View_Helper_Abstract 
{ 
    public $userId = ''; 
    public $config = null; 
    public function myHelper ($userId = null, $config = null) 
    { 
     if ($userId) { 
      $this->userId = $userId; 
      $this->config = $config; 
     } else { 
      //do the work 
      $obj = new SomeModel($this->config); 
      $states = $obj->fetchByUser($this->userId); 
      //do the work here 
     } 
     return $this; 
    } 
} 

任何意见是值得欢迎的!

回答

1

首先,在这里“$ this-> myHelper();%>”的ASP风格的结束标签是不好的做法,因为这样说更适合将逻辑保留在模型中,而控制器只是用于调用模型,获得结果并将其吐到视图中查看。

我还能做什么,如果我只是想了一堆价值传递给视图,我地把它们关联数组,并将它们发送。

反正你不应该这样做你的...

“//逻辑相当这里用这个结果来准备一些JavaScript应该被发送到视图......”

部分控制器,我会建议你创建一个新的模型,为你做这个逻辑的东西,你只需要在控制器中调用你的模型,通过它需要的任何参数,然后将结果吐在视图中。

+1

我的问题是究竟采取这种代码移出控制器。我不想做的事情是让我的模型输出

0

最好的办法是从你的模型throught控制器获取数据,然后传递给视图。但是如果你确实需要一个定制的助手来回显视图部分,我们只会知道你是否确切地说出了你想要做的。

如果你已经有了一个帮手这个逻辑,试图只传递在你看来myhelper($这个 - > PARAMS)的参数; ?>

你可能想看看这种做法太:

// In your view to put javascript in the header 
// You can loop trought your data and then use it to generate the javascript. 
<?php $this->headScript()->captureStart(); ?> 
    $().ready(function(){ 
     $('#slideshow').cycle({ 
      fx:  'fade', 
      speed: 1000, 
      timeout: 6500, 
      pager: '#nav' 
     }); 
    }); 
<?php $this->headScript()->captureEnd() ?> 
相关问题