引用模型中应用程序设置的变量(一个好主意?)

时间:2010-08-06 12:55:29

标签: zend-framework doctrine

我正在使用zend framework 1.10和doctrine 2.我想知道在我的(doctrine)模型类中,引用由我的应用程序设置的变量(bootstrap.php,存储在Zend_Registry中的变量)是个好主意,我认为它类似于全局变量)

我想要访问的是doctrine entityManager。我也想要登录用户的id

3 个答案:

答案 0 :(得分:1)

我正在构建一个类似设置的项目(ZF 1.10 + Doctrine2),我使用依赖注入来处理这种情况,就像 takehin 所说的那样。这里是完整的项目存储库URL:https://bitbucket.org/phpfour/zf-doctrine2。以下是一些代码摘录。

这是我的控制器:

<?php

require_once APPLICATION_PATH . "/models/PostManager.php";

class IndexController extends Zend_Controller_Action
{
    private $_em;

    public function init()
    {
        $this->_em = $this->getInvokeArg('bootstrap')->getResource('doctrine');
    }

    public function indexAction()
    {
        $pm = new PostManager($this->_em);
        $this->view->posts = $pm->getPublicPosts();
    }

我的实体经理(或服务类):

<?php

class PostManager
{
    protected $_em;

    public function __construct(Doctrine\ORM\EntityManager $em)
    {
        $this->_em = $em;
    }

    public function getPublicPosts()
    {
        $query = $this->_em->createQuery('SELECT p FROM Entities\Post p WHERE p.visible = true');
        $posts = $query->getResult();
        return $posts;
    }

希望这有帮助!

答案 1 :(得分:0)

你应该简单地将Zend_Auth用于登录用户ID问题,然后在模型中执行类似以下的操作

class Model extends BaseModel
{
    public function something()
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {

            $loggedInUserId = $auth->getIdentity()->id;
        }
    }
}

答案 2 :(得分:0)

这种方法没有错(除非你指的是单身人士)。尽可能使用依赖注入。

但是我会为此创建一个服务(或两个)。

class Modulename_Services_Servicename
{
    public function getCurrentUser() { ... }

    public function getCurrentUserModel() { ... }

    public function isLogged() { ... }

    public function authenticate() { ... }

    public function getSomeData()
    {
        $user = $this->getCurrentUser()
        $model = new YourModel($user);
        $query = ....;
        $result = $query->execute();

        return $result;

    }

    public function getSomeMoreData($usermodel) { ... }

}