Ссылка на переменную, установленную приложением в моделях (хорошая идея?) - PullRequest
0 голосов
/ 06 августа 2010

Я использую Zend Framework 1.10 с доктриной 2. Интересно, если в моем (doctrine) модельном классе есть хорошая идея ссылаться на переменную, установленную моим приложением (bootstrap.php, переменная, хранящаяся в Zend_Registry, я думаю это что-то вроде глобальной переменной)

я хочу получить доступ к доктрине entityManager. также я хочу, чтобы идентификатор вошел в систему пользователя

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Я строю проект с аналогичной настройкой (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;
    }

Надеюсь, это поможет!

0 голосов
/ 07 августа 2010

В этом подходе нет ничего плохого (если только вы не имеете в виду синглтоны).По возможности используйте внедрение зависимостей.

Однако я бы создал для этого сервис (или два).

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) { ... }

}
0 голосов
/ 06 августа 2010

Вы должны просто использовать Zend_Auth для проблемы logged in userId, а затем сделать что-то подобное в вашей модели

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

            $loggedInUserId = $auth->getIdentity()->id;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...