Zend Framework найти магический метод? - PullRequest
2 голосов
/ 04 февраля 2009

Вместо использования $this->fetchAll('email = ?',$email)->current() внутри класса модели, есть ли способ сделать $this->fetchByEmail($email) или $this->findByEmail($email)?

Уже существует магический метод, подобный этому, для Zend_Log, где вместо $myLogger->log("Something went wrong",Zend_Log::CRIT) вы просто пишете $myLogger->crit("Something went wrong"), и он автоматически отображается (через некоторое странное отражение в методе __call()).

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

Ответы [ 2 ]

5 голосов
/ 04 февраля 2009

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

Нечто подобное должно сработать:

public function __call($function, $args)
{
    // Expects findBy to be the first part of the function
    $criteria = substr($function, 6);
    $criteria = strtolower($criteria);

    $select = $this->select()
                ->from($this->_name)
                ->where($criteria . ' = ?', $args);
}

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

0 голосов
/ 04 февраля 2009

Согласно документации, вы должны сделать это самостоятельно http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.extending.finders

Поэтому я предлагаю создать свой собственный или использовать тот, который опубликовал gabriel1836

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