Доктрина 2.x CRUD - PullRequest
       11

Доктрина 2.x CRUD

3 голосов
/ 19 ноября 2011

Я слышал много хорошего о ORM Doctrine. Я могу приложить немало усилий для изучения Доктрины, используя отличный учебник, такой как http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup,, но он довольно устарел и использует Doctrine 1.x. Я предпочитаю немедленно изучить Doctrine 2.x, чтобы сэкономить время.

Мне удалось установить Doctrine 2.1 в сочетании с Codeigniter 2.0.3. Мне уже удалось выполнить некоторые основные операции, такие как добавление новых объектов и сохранение их в базе данных. Сейчас я пытаюсь сделать что-то, что не должно быть слишком сложным, но я потратил довольно много времени, чтобы выяснить, как сделать следующее:

Если я хочу создать объект с использованием данных $ _POST, я не хочу назначать каждое свойство отдельно в коде. Я бы предпочел что-то вроде $ u-> fromArray, например как показано в

$data = array(
'username' => 'myuser',
'password' => 'mypass',
'email' => 'my@email.com'
);

$u = new User();
$u->fromArray($data);
$u->save();

Источник: http://www.phpandstuff.com/articles/codeigniter-doctrine-day-5-database-crud

Однако fromArray () больше не существует в Doctrine 2.x. Есть ли эквивалент для fromArray () в Doctrine 2.x?

Второй вопрос: мне довольно сложно начать. Официальные документы посвящены в основном доктрине. Было бы очень хорошо иметь практический пример, который включает в себя такие вещи, как проверка формы, операции crud и т. Д. Было бы очень хорошо иметь пример проекта MVC с использованием Doctrine 2. Кто-нибудь знает такой учебник или пример проекта?

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

Ответ на самом деле в том, что вам решать.Ваши сущности - это просто старые PHP-объекты - так что вы должны научить их трюкам (например, реализовать метод fromArray ()) или создать инфраструктуру вокруг них.

Некоторые параметры, которые могутили не подходит для вашего варианта использования:

  • Пишите конструкторы для ваших сущностей, которые заполняют свойства: new Article($title, $author, $abstract, $body) или new Article($arrayOrObject)
  • Пишите статический метод фабрики
  • Напишите свою собственную реализацию fromArray ()
  • Напишите свою собственную реализацию fromArray () в абстрактном классе, который наследуют все ваши сущности, и, возможно, при необходимости переопределяют
0 голосов
/ 15 апреля 2015

Вы можете преобразовать массив в объект, используя некоторые сторонние модули Doctrine, такие как DoctrineModule , вместо реализации fromArray () или populate ().Например, вы можете сделать что-то вроде:

use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;

$hydrator = new DoctrineHydrator($objectManager);

$data = array(
    'username' => 'myuser',
    'password' => 'mypass',
    'email' => 'my@email.com'
);

$user = new User();
$user = $hydrator->hydrate($data, $user);

$em->persist($user);
$em->flush();
0 голосов
/ 20 ноября 2011

В каждом примере, который я видел и в своем опыте кодирования с Doctrine2, правильный способ создания объекта из данных $ _POST - это индивидуальное задание каждого свойства с использованием установщиков в классах сущностей.

fromArray (), конечно, кажется удобным, но, зная, как Doctrine2 обрабатывает ассоциации, я не мог понять, как это вас уводит очень далеко.

Что касается хорошего учебника по CRUD для Doctrine2, вам может понравиться пример главы из книги "Легкие PHP-сайты с Zend Framework". Сама книга посвящена ZF, а не CodeIgniter, но в главе с примерами, посвященной Zend, очень мало. Однако вы, вероятно, предпочтете держаться подальше от репозитория образцов z2d2.

Помимо этого, на этом сайте есть несколько полезных вопросов и ответов по Doctrine2, которые относятся к контексту CRUD. Продолжайте публикацию, и я уверен, что я или кто-то из других здесь может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...