рд╣рд╛рдп рд╣рд╛рдпрдмрдпреНрдпреВрдЬрд╝рд░реА!
рдЕрдзрд┐рдХрд╛рдВрд╢ Yii рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛, рдкреНрд░рдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдкреНрд░рдкрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди ActiveForm рд╡рд┐рдЬреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреГрд╢реНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рдВ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реИ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рдореИрдВ рдлреЙрд░реНрдо рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдПрдХ рдлреЙрд░реНрдо рдбрд┐рдЬрд╛рдЗрдирд░ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЦрдВрдб
www.yiiframework.ru/doc/guide/ru/form.builder рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд
рдХрд░рд╛рдПрдВ ред
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп "рдореЙрдбрд▓ рдФрд░ рдЯреЗрдмрд▓ рдореЙрдбрд▓ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рди рдХрд░реЗрдВ" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдлреЙрд░реНрдо рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдбрд┐рдЬрд╛рдЗрдирд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред рдпрд╛рдиреА рдЖрдЗрдП рдлреЙрд░реНрдо рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЦреБрдж рдлреЙрд░реНрдо рдореЙрдбрд▓ рдХрд░реЗрдВред
class FormModel extends CFormModel { protected $_formConfig = array(); private $_defaultFormConfig = array( 'method' => 'post' ); protected $_formClass = 'CForm'; private $_form = null; public function __construct($scenario = '') { parent::__construct($scenario); $this->_setFormConfig(); } private function _setFormConfig() { $this->_formConfig = array_replace_recursive( $this->_defaultFormConfig, $this->_formConfig() ); } protected function _formConfig() { return $this->_formConfig; } public function attributeLabels() { return $this->getLabels(); } public function getFromConfig() { return $this->_formConfig; } public function setFromConfig(array $config) { $this->_formConfig = $config; } public function getLabels() { $labels = array(); if (!empty($this->_formConfig['elements'])) { foreach ($this->_formConfig['elements'] as $name => $data) { if (isset($data['label'])) { $labels[$name] = $data['label']; } } } return $labels; } public function getForm() { if ($this->_form === null) { $this->_form = new $this->_formClass($this->_formConfig, $this); } return $this->_form; } }
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рд╕рд░рдгреА "$ _formConfig" рдЖрдкрдХреЛ рдлрд╝реЙрд░реНрдо рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
protected $_formConfig = array( 'activeForm' => array( 'class' => 'CActiveForm', 'id' => 'registration_form', 'enableClientValidation' => true, 'clientOptions' => array( 'validateOnSubmit' => true ) ), 'elements' => array( .... 'name' => array( 'type' => 'text', 'label' => '' ), 'organization' => array( 'type' => 'text', 'label' => '' ), .... ), 'buttons' => array( 'register' => array( 'type' => 'submit', 'label' => '' ) ) );
рдЖрдк рдлрд╝реЙрд░реНрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "_formConfig ()" рд╡рд┐рдзрд┐ рдХреЛ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
"$ _FormClass" рд╕рдВрдкрддреНрддрд┐ рдЖрдкрдХреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝реЙрд░реНрдо (рд╕реАрдлрд╝реЙрд░реНрдо рдпрд╛ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ) рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рдлрд╝реЙрд░реНрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреВрд░реНрдгрд╛рдВрдХ () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкреНрд░рдкрддреНрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд▓реЗрдмрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВред
рдЖрдк "getForm ()" рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЙрд░реНрдо рдСрдмреНрдЬреЗрдХреНрдЯ (CForm) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
рдлрд╛рд░реНрдо рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди:
$formModel = new RegistrationForm(); $form = $formModel->getForm(); echo $form;
рддрд╛рд▓рд┐рдХрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
$user = new User(); $user->setAttributes($formModel->getAttributes()); $result = $user->save();
рдлреЙрд░реНрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВред "$ _FormConfig" рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣рдо "рд▓реЗрдЖрдЙрдЯ" рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
protected $_formConfig = array( .... 'elements' => array( .... 'name' => array( 'type' => 'text', 'label' => '', 'layout' => "{input}\n{label}\n{hint}\n{error}" ), .... ),
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХреЛрд▓рди рдЬреЛрдбрд╝реЗрдВред
рдкреНрд░рдкрддреНрд░ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реЗрдбрд░ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХреЛрд▓реЛрди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдереАред рдпрджрд┐ рдХреЛрд▓рди рдХреЛ рд▓реЗрдмрд▓ рдореЗрдВ рдлреЙрд░реНрдо рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬрдм рдПрд░рд░ рджрд┐рдЦреЗрдВрдЧреЗред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо тАЬCFormтАЭ рдФрд░ тАЬCFormInputElementтАЭ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ тАЬFormModelтАЭ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗред
"FormModel" рдореЗрдВ:
public $autoAddColonForRender = true;
рдФрд░ $ _formClass рдмрджрд▓реЗрдВ
protected $_formClass = 'Form';
рдЖрдЗрдП рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ "рдлрд╝реЙрд░реНрдо" рдФрд░ "CForm" рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдмрдирд╛рдПрдВ, рдЗрд╕рдореЗрдВ рд╣рдо рд╕рдВрдкрддреНрддрд┐ "$ inputElementClass" рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВрдЧреЗред
class Form extends CForm { public $inputElementClass = 'FormInputElement'; }
рдЪрд▓реЛ рдПрдХ рд╡рд░реНрдЧ "FormInputElement" ("CFormInputElement" рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА) рдмрдирд╛рдПрдВ, рдЗрд╕рдореЗрдВ рд╣рдо "рд░реЗрдВрдбрд░рд▓реИрдмреЗрд▓ ()" рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
class FormInputElement extends CFormInputElement { public $layout = "{label}\n{input}\n{error}\n{hint}"; public $addColon = null; public function renderLabel() { $model = $this->getParent()->getModel(); $addColon = $this->addColon !== null ? $this->addColon : $model instanceof FormModel && $model->autoAddColonForRender; $label = $addColon ? $this->getLabel() . ':' : $this->getLabel(); $options = array( 'label' => $label, 'required' => $this->getRequired() ); if (!empty($this->attributes['id'])) { $options['for'] = $this->attributes['id']; } return CHtml::activeLabel($this->getParent()->getModel(), $this->name, $options); } }
рдЕрдм "FormModel" рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ "$ autoAddColonForRender" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдлреЙрд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХреЛрд▓реЛрди рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╛ рдкреНрд░рдкрддреНрд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЙрд░реНрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдПрдбрдХреЙрди" рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВред
protected $_formConfig = array( .... 'elements' => array( .... 'name' => array( 'type' => 'text', 'label' => '', 'addColon' => true ), .... ),
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдЙрджреНрджреЗрд╢реНрдпрдкреВрд░реНрдг рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред