0

我需要来自模型的不同结果,但我不明白它是否正确进行一次调用并留下对所有工作进行建模或进行更多调用并收集结果以在表未加入时传递给视图或当我需要从表中获取一行,并从其他行中获取不同的行。

第一个示例(更多呼叫,收集并发送以查看):

控制器

// call functions of model
$modelName = new Application_Model_DbTable_ModelName();
$rs1 = $modelName->getTest($var);
$rs2 = $modelName->getTest2($var2);

// collect data
$pippo = $rs1->pippo;
if ($rs2->pluto == 'test') {
    $pluto = 'ok';
} else {
    $pluto = 'ko';
}

// send to view
$this->view->pippo = $pippo;
$this->view->pluto = $pluto;

模型

public function getTest($var) {
...
select from db...
return $result;
...
}


public function getTest2($var) {
...
select from db...
return $result;
...
}

第二个例子(一次调用,模型收集所有数据,返回控制器并发送到视图):

控制器

// call one function of model
$modelName = new Application_Model_DbTable_ModelName();
$rs = $modelName->getTest($var);

模型

public function getTest($var) {
...
select from db...

if ($result > 0) {
    call other function
    call other function
    collect data
    return $result;
    ...
}

谢谢

4

2 回答 2

2

There's no one correct answer to this question, but in general, you should endeavor to keep your business logic in one place. Think of it as, "thin controller, thick model." I.e., keep the controllers as small and simple as possible and put all the business logic in the models.

于 2012-12-17T16:16:32.717 回答
0

这里似乎有几个问题:

但是,如果我不需要与 db 交互并且我只需要一个简单的函数,最好将该函数放入模型中?例如:控制器:

public function printAction() {
    $data = $this->getRequest()->getPost(); 
    $label = "blablabla"; 
    $this->view->label = $label;       
}

首先,在 Zend Framework 的上下文中,这个特定示例没有多大意义。控制器的重点是填充视图模板。不过,我确实明白这一点。我会向您指出Action HelpersView helpers作为解决您问题的一种方式。对于那些似乎不适合其他任何地方的代码,您始终可以将实用程序类添加到您的库中。

Action Helpers通常用于封装可能重复或可重用的控制器代码。它们可以根据需要简单或复杂,这是一个简单的示例:

class Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * @return \Application_Form_Login
     */
    public function direct()
    {
        $form = new Application_Form_Login();
        $form->setAction('/index/login');

        return $form;
    }
}

//add the helper path to the stack in the application.ini
resources.frontController.actionhelperpaths.Controller_Action_Helper = APPLICATION_PATH "/../library/Controller/Action/Helper"

//the helper is called in the controller
$this->_helper->login();

视图助手对视图模板做同样的事情:

class Zend_View_Helper_PadId extends Zend_View_Helper_Abstract
{
    /**
     * add leading zeros to value
     * @param type $id
     * @return string
     */
    public function padId($id)
    {
        return str_pad($id, 5, 0, STR_PAD_LEFT);
    }
}

//in this example the helper path is added to the stack from the boostrap.php
 protected function _initView()
    {
        //Initialize view
        $view = new Zend_View();
        //add custom view helper path
        $view->addHelperPath('/../library/View/Helper');
        //truncated for brevity
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
                'ViewRenderer');
        $viewRenderer->setView($view);
        //Return it, so that it can be stored by the bootstrap
        return $view;
    }
//and to use the helper in the view template
//any.phtml
<?php echo $this->padId($this->id) ?>

我需要来自模型的不同结果,但我不明白它是否正确进行一次调用并留下对所有工作进行建模或进行更多调用并收集结果以在表未加入时传递给视图或当我需要从表中获取一行,并从其他行中获取不同的行。

这个问题更多的是关于结构而不是关于正确性。

如果需要,您可以在 Action 和 View 助手中与您的数据库表模型进行交互以进行简单/重复查询,但是大多数开发人员可能不赞成这种方法,因为这种方法难以维护或丑陋。

许多人似乎更喜欢DoctrinePropel来帮助他们管理他们的数据库需求。

在这一点上,我喜欢推出我自己的,目前更喜欢领域模型和数据映射器,并不是所有的模式,但似乎适合你的问题。

这不是第一次实施的简单建议,但是我发现两篇文章有助于入门:

http://phpmaster.com/building-a-domain-model/

http://phpmaster.com/integrating-the-data-mappers/

如果您真的想进入它,请尝试:

http://survivethedeepend.com/

我希望这至少能回答你的部分问题。

于 2012-12-22T14:20:33.597 回答