Скрыть столбцы при сериализации через toArray()

У меня есть простая проблема, когда я часто возвращаю запросы Ajax типа CRUD с сериализованными версиями моделей Doctrine 1.2. Я хотел бы иметь возможность просто вернуть метод toArray() после результата execute(), однако это будет отображать данные о моих моделях, которые я не хочу раскрывать. Простой пример: в моей пользовательской модели отображаются пароль и соль. Хотя я понимаю, что это уже хешированные значения, я бы не стал возвращать их в виде ответа JSON.

Я изучил руководство по Doctrine 1.2, но не нашел ничего, что предлагало бы функциональность, которую я ищу. Я понимаю, что могу перебрать результат, чтобы вручную unset() столбцы, которые я хочу скрыть, но я надеюсь, что есть более родное решение, которое я упустил из виду.


person Andy Baird    schedule 31.07.2012    source источник


Ответы (1)


Почему бы вам не построить свой собственный toArray() ?

Если вы хотите это сделать, вам придется расширить класс sfDoctrineRecord, который наследуется от всех классов Base*. Описано в документе.

Вы должны поместить configureDoctrine() внутрь config/ProjectConfiguration.class.php.

Тогда у вас будет такой класс:

class myDoctrineRecord extends sfDoctrineRecord
{
}

Таким образом, вы можете легко добавить свой собственный toArray() здесь:

class myDoctrineRecord extends sfDoctrineRecord
{
  public function toArray($deep = true, $prefixKey = false, array $excludeFields = array())
  {
    // do every thing like the original toArray
    // but when a column match one entry in $excludeFields, don't add it
  }
}

Итак, при использовании метода toArray() с массивом полей для третьих параметров они будут исключены из результата.

person j0k    schedule 31.07.2012