Краткое руководство по Zend - создание модели. Зачем нам нужен этот метод setOption? - PullRequest
0 голосов
/ 25 апреля 2011

Из документации здесь: http://framework.zend.com/manual/en/learning.quickstart.create-model.html

Мы видим:

// application/models/Guestbook.php

class Application_Model_Guestbook
{

    protected $_comment;
    protected $_created;
    protected $_email;
    protected $_id;


    public function __construct(array $options = null)
    {
        if (is_array($options)) {

            $this->setOptions($options);
        }

    }


    public function __set($name, $value)
    {
        $method = 'set' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {

            throw new Exception('Invalid guestbook property');
        }

        $this->$method($value);
    }


    public function __get($name)
    {
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid guestbook property');

        }
        return $this->$method();
    }

    public function setOptions(array $options)
    {
        $methods = get_class_methods($this);
        foreach ($options as $key => $value) {
            $method = 'set' . ucfirst($key);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }

... following getters and setters...

Я не понимаю, и это не объясняется (возможно, потому что это легко), что это делает и зачем нам нужен метод setOptions ?

Я пытаюсь следовать этому руководству, но я не могу слепо вставлять код, не зная причины его существования. Я буду счастлив с моделью, содержащей только геттеры и сеттеры, но, возможно, все это не сработает, если я не буду использовать этот метод setOptions. Я обеспокоен, потому что вижу это на конструкторе, поэтому, должно быть, это важно как-то.

Может ли кто-нибудь помочь мне разобраться, если нам это действительно нужно, и если да, что это значит?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 апреля 2011

IMO, это хороший способ создать такой метод, потому что вы, скорее всего, получите «массив вещей» (скажем ... из формы), а не дискретные переменные.И IMO лучше и более читабельно использовать

$this->setOption($form->getValues());

, а затем вызывать его один за другим

$data = $form->getValues();
$this->setName($data['name']);
$this->setSurname($data['surname']);
// ....

Но этот метод должен находиться в некотором родительском классе, который расширяется Application_Model_Guestbook что было, я думаю, вне рамок гикстарта.Также может быть полезно поднять какое-то уведомление, когда в параметре массива отсутствует сеттер.

3 голосов
/ 25 апреля 2011

Это просто шаблон, который используют различные компоненты ZF.

Вы можете предоставить массив конфигурации (опции) для конструктора для многих компонентов.Как правило, API для таких настраиваемых компонентов включает метод setOptions, который вы видите здесь.

Это всего лишь руководство в кратком обзоре.Лично я не слежу за этим, так как считаю, что модели должны следовать более специфичному для конкретной задачи / предметной области интерфейсу. Например, по моему мнению, модель гостевой книги должна принимать только определенные вещи в конструкторе, такие как владелец гостевой книги илитакие, и не позволяют «общий» список опций.

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