Вот так я делаю проверку модели, и я чувствую, что это наиболее просто и элегантно.
Сначала я устанавливаю свои правила в методе rules ():
<?php defined('SYSPATH') or die('No direct access allowed.');
class Model_Brand extends ORM {
public function rules()
{
return array(
'name' => array(
array('not_empty'),
array('min_length', array(':value', 3)),
array('max_length', array(':value', 20)),
)
'sku' => array(
array('not_empty'),
array('min_length', array(':value', 3)),
array('max_length', array(':value', 6)),
)
);
);
}
И этоВот как я управляю своим действием редактирования:
public function action_edit()
{
$brand = ORM::factory('brand', $this->request->param('id'));
if (!$brand->loaded())
{
throw new Kohana_Exception('Brand not found.');
}
$this->template->title = __('Edit Brand');
$this->template->content = View::factory('brands/edit')
->set('brand', $brand)
->bind('errors', $errors);
if ($this->request->method() === Request::POST)
{
try
{
$brand->values($this->request->post());
$brand->save();
// Success! You probably want to set a session message here.
$this->request->redirect($this->request->uri());
}
catch(ORM_Validation_Exception $e)
{
// Fail!
$errors = $e->errors('brand');
}
}
}
И на мой взгляд:
<?php if ($errors) {?>
<!-- display errors here -->
<?php } ?>
<?php echo Form::open()?>
<fieldset>
<div class="field">
<?php echo
Form::label('name', __('Name')),
Form::input('name', $brand->name)
?>
</div>
<?php echo Form::submit('save', 'Save')); ?>
</fieldset>
<?php echo Form::close()?>
Как вы можете видеть в представлении, я не делаю никакой условной проверки, чтобы увидеть, чтодля отображения в поле формы, поскольку этим управляют данные в модели, которой управляет контроллер.
Надеюсь, это поможет, спросите, нуждаетесь ли вы в дополнительных разъяснениях.