ZendDbSchema
Schema management for Zend Framework
 All Classes Namespaces Functions Pages
AbstractTable.php
1 <?php
31 {
37  protected $_columnValidators = array();
38 
44  protected $_indexValidators = array();
45 
51  protected $_foreignKeyValidators = array();
52 
63  public function addIndexValidator(Zend_Validate_Interface $validator, $breakChainOnFailure = false)
64  {
65  $this->_indexValidators[] = array(
66  'instance' => $validator,
67  'breakChainOnFailure' => (boolean) $breakChainOnFailure
68  );
69  return $this;
70  }
71 
82  public function addForeignKeyValidator(Zend_Validate_Interface $validator, $breakChainOnFailure = false)
83  {
84  $this->_foreignKeyValidators[] = array(
85  'instance' => $validator,
86  'breakChainOnFailure' => (boolean) $breakChainOnFailure
87  );
88  return $this;
89  }
90 
101  public function addColumnValidator(Zend_Validate_Interface $validator, $breakChainOnFailure = false)
102  {
103  $this->_columnValidators[] = array(
104  'instance' => $validator,
105  'breakChainOnFailure' => (boolean) $breakChainOnFailure
106  );
107  return $this;
108  }
109 
118  public function isValid($value)
119  {
120  $this->_messages = array();
121  $this->_errors = array();
122  $result = true;
123 
124  if (!$value instanceof ZendDbSchema_Db_Schema_Table) {
125  $this->_messages[] = 'Value must be instance of ZendDbSchema_Db_Schema_Table';
126  $this->_errors[] = 'tableInvalid';
127  return false;
128  }
129 
130  foreach ($this->_validators as $element) {
131  $validator = $element['instance'];
132  if ($validator->isValid($value)) {
133  continue;
134  }
135  $result = false;
136  $messages = $validator->getMessages();
137  $this->_messages = array_merge($this->_messages, $messages);
138  $this->_errors = array_merge($this->_errors, array_keys($messages));
139  if ($element['breakChainOnFailure']) {
140  break;
141  }
142  }
143 
144  $val = new Zend_Validate_GreaterThan(0);
145  if (!$val->isValid(count($value->columns()))) {
146  $result = false;
147  $messages = array('columnsEmpty' => 'Must be at least 1 column in table');
148  $this->_messages = array_merge($this->_messages, $messages);
149  $this->_errors = array_merge($this->_errors, array_keys($messages));
150  }
151 
152  foreach ($value->columns() as $column) {
153  foreach ($this->_columnValidators as $element) {
154  $validator = $element['instance'];
155  if ($validator->isValid($column)) {
156  continue;
157  }
158  $result = false;
159  $messages = $validator->getMessages();
160  $this->_messages = array_merge($this->_messages, $messages);
161  $this->_errors = array_merge($this->_errors, array_keys($messages));
162  if ($element['breakChainOnFailure']) {
163  break;
164  }
165  }
166  }
167 
168  foreach ($value->indexes() as $index) {
169  foreach ($this->_indexValidators as $element) {
170  $validator = $element['instance'];
171  if ($validator->isValid($index)) {
172  continue;
173  }
174  $result = false;
175  $messages = $validator->getMessages();
176  $this->_messages = array_merge($this->_messages, $messages);
177  $this->_errors = array_merge($this->_errors, array_keys($messages));
178  if ($element['breakChainOnFailure']) {
179  break;
180  }
181  }
182  }
183 
184  foreach ($value->foreigns() as $foreign) {
185  foreach ($this->_indexValidators as $element) {
186  $validator = $element['instance'];
187  if ($validator->isValid($foreign)) {
188  continue;
189  }
190  $result = false;
191  $messages = $validator->getMessages();
192  $this->_messages = array_merge($this->_messages, $messages);
193  $this->_errors = array_merge($this->_errors, array_keys($messages));
194  if ($element['breakChainOnFailure']) {
195  break;
196  }
197  }
198  }
199  return $result;
200  }
201 }