【发布时间】:2013-06-26 18:19:43
【问题描述】:
每个通过“入门”教程开始 ZF2 学习的人都会知道模型类 Album(如下)。
现在我想用歌曲扩展我的模型。一张专辑可以有 0 首或更多首歌曲。这些歌曲将获得一个新的 talbe songs (id, title, album_id) 和映射器Album\Model\Song。映射器Album\Model\Song 的构建类似于Album\Model\Album。映射器Album\Model\Album 将获得一个新属性songCollection(Album\Model\Song 对象的数组,或者可能类似于Album\Model\SongCollection 对象)。
- 将
InputFilter用于“嵌套”(映射器)类是否有意义? -
getInputFilter()应该如何修改? - 应该如何修改
setInputFilter()?好的,现在它根本没有实现。但是对于浅层类结构,如何实现这一点大致很清楚——并且不清楚如何为引用另一个映射器(-s)的映射器实现它。
Album\Model\Album
<?php
namespace Album\Model;
use Zend\Stdlib\ArraySerializableInterface;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
class Album implements InputFilterAwareInterface, ArraySerializableInterface {
public $id;
public $artist;
public $title;
protected $inputFilter;
public function exchangeArray(array $data) {
$this->id = (isset($data['id'])) ? $data['id'] : null;
$this->artist = (isset($data['artist'])) ? $data['artist'] : null;
$this->title = (isset($data['title'])) ? $data['title'] : null;
}
public function toArray() {
return $this->getArrayCopy();
}
public function getArrayCopy() {
return get_object_vars($this);
}
public function setInputFilter(InputFilterInterface $inputFilter) {
throw new \Exception('Not used');
}
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'id',
'required' => true,
'filters' => array(
array('name' => 'Int')
)
)));
$inputFilter->add($factory->createInput(array(
'name' => 'artist',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim')
),
'validarots' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100
)
)
)
)));
$inputFilter->add($factory->createInput(array(
'name' => 'title',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim')
),
'validarots' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100
)
)
)
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
}
【问题讨论】:
标签: orm model zend-framework2 zend-inputfilter