рд╢реБрдн рд╕рдВрдзреНрдпрд╛, рд╣рдмреНрдмрд░ред
рдЖрдЬ рдореИрдВ рдПрдХ рдЫреЛрдЯреЗ рдлреЙрд░реНрдо рдШрдЯрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рдЕрджреНрднреБрдд PHP Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ред рдпрд╣ рдШрдЯрдХ (рдпрд╛ рдмрд▓реНрдХрд┐, рдкреНрд░рдкрддреНрд░ рдореЙрдбрд▓) рдЖрдкрдХреЛ рд╡реЗрдм рд╕реЗ рд╕реАрдзреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдЦ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдПрдХ рд╣рд╛рд▓рд┐рдпрд╛
рдкреЛрд╕реНрдЯ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ Yii рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ / рдХреИрд╢ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░
рд╡рд╛рдИ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдПрдХ рдирд┐рдпрдорд┐рдд php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
return array( 'name' => 'My Awesome Web Site', 'lang' => 'ru', 'sourceLang' => 'en', );
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╕рд╛рдЗрдЯ рдХреЗ рдХреБрдЫ рд╕реНрдерд┐рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрднреА-рдХрднреА рд╕рдВрдХреЗрдд рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрд╖ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдпрд╛ рдлрд╝реЛрди рдирдВрдмрд░ рд▓реЗрдВ, рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдХреЛрдб рдореЗрдВ рдХреНрд░реЙрд▓ рди рдХрд░рдиреЗ рджреЗрдВ, рд╣реИ рдирд╛? (:
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рднреНрд░рд╛рдордХ рд╣реИред рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдЖрджрд░реНрд╢
рдПрдХ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рд╣реИред рдФрд░ config рдлрд╛рдЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╣реИ? рд╕рд╣реА, рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдПрдХ рд╕рд░рдгреАред рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
class ConfigForm extends CFormModel { private $_config = array(); public function __construct($config = array(), $scenario = '') { parent::__construct($scenario); $this->setConfig($config); } public function setConfig($config) { $this->_config = $config; } public function getConfig() { return $this->_config; } }
рдЕрднреА рддрдХ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ, рд╣реИ рдирд╛?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, $ _config рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдЧреЗрдо рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛редрдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд╛рдо рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рд╣рд░ рдмрд╛рд░ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ (рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ)ред рддреЛ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд░рдгреА рд╣реИ:
array( 'name' => 'My Awesome Site',
рдЗрд╕ рд╕рд░рдгреА рд╕реЗ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдирд╛рдо ,
рдкрд░рдореЗрд╕ [adminEmail] ,
params [phoneNumber] ,
params [рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп] ред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:
рдореЗрд░рд╛ рдлреИрд╕рд▓рд╛ public function getAttributes() { $this->attributesRecursive($this->_config, $output); return $output; } public function attributeNames() { $this->attributesRecursive($this->_config, $output); return array_keys($output); } public function attributesRecursive($config, &$output = array(), $name = '') { foreach ($config as $key => $attribute) { if ($name == '') $paramName = $key; else $paramName = $name . "[{$key}]"; if (is_array($attribute)) $this->attributesRecursive($attribute, $output, $paramName); else $output[$paramName] = $attribute; } }
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:
public function rules() { $rules = array(); $attributes = array_keys($this->_config); $rules[] = array(implode(', ', $attributes), 'safe'); return $rules; }
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдкреНрд░рдкрддреНрд░
рдкрд░рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
[рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп] рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдХреБрдЫ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ params рд╕рд░рдгреА, рд▓реЗрдХрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВредрдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП
$ рдореЙрдбрд▓ -> $ рд╡рд┐рд╢реЗрд╖рддрд╛, рд╣рдо __set () рдФрд░ __get ()) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
public function __get($name) {
рдХреНрдпрд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рддреЛ, рдореЙрдбрд▓ рдврд╛рдВрдЪрд╛ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдлреЙрд░реНрдо рд╕реЗ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк POST рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд╝реЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ:
public function run() { $path = YiiBase::getPathOfAlias('application.config') . '/params.php'; $model = new ConfigForm(require($path)); if (isset($_POST['ConfigForm'])) { $model->setAttributes($_POST['ConfigForm']); if($model->save($path)) { Yii::app()->user->setFlash('success config', ' '); $this->controller->refresh(); } } $this->controller->render('config', compact('model')); }
рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдкреА рди рдХрд░реЗрдВ, рдмрд╕ рд╕рд╛рд░ рд╕рдордЭреЗрдВрдХреБрдЫ? рдХреНрдпрд╛ CFormModel рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдмрдЪрдд () рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ? рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдлрд╝рд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗрдВ public function save($path) { $config = $this->generateConfigFile();
рдЕрдЪреНрдЫрд╛ KeepYourMind рдиреЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдЖрдк php рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ var_export () рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдЗрдХ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛рд╣рдореЗрдВ рдПрдХ рд╡реНрдпреВ рдлрд╛рдЗрд▓ рдХреА рднреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореМрдЬреВрджрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реА рдлреЙрд░реНрдо рдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИред
<?php $form = $this->beginWidget('CActiveForm', array( 'id' => 'config-form', 'enableAjaxValidation' => false,
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдВрджрд░ рдХреИрдкреНрд╢рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдореЙрдбрд▓ рдореЗрдВ рд╣рд╛рд░реНрдб-рдбрд┐рдлрд╛рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
public function attributeLabels() { return array( 'name' => ' ', 'params[adminEmail]' => 'Email ', 'params[phoneNumber]' => ' ', 'params[motto]' => ' ', ); }
рдпрд╣ рдмрджрд╕реВрд░рдд рдФрд░ рдЕрд╕рднреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ - рд╡реИрд╕реЗ рднреА, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ 2 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред рдореИрдВ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдореЙрдбрд▓ рдХреЛрдб рджреЗрддрд╛ рд╣реВрдВ:
рдкреВрд░реНрдг рдореЙрдбрд▓ рдХреЛрдб class ConfigForm extends CFormModel { private $_config = array(); public function __construct($config = array(), $scenario = '') { parent::__construct($scenario); $this->setConfig($config); } public function setConfig($config) { $this->_config = $config; } public function getConfig() { return $this->_config; } public function __get($name) { if (isset($this->_config[$name])) return $this->_config[$name]; else return parent::__get($name); } public function __set($name, $value) { if (isset($this->_config[$name])) $this->_config[$name] = $value; else parent::__set($name, $value); } public function save($path) { $config = $this->generateConfigFile(); if(!is_writable($path)) throw new CException("Cannot write to config file!"); file_put_contents($path, $config, FILE_TEXT); return true; } public function generateConfigFile() { $this->generateConfigFileRecursive($this->_config, $output); $output = preg_replace('#,$\n#s', '', $output); return "<?php\nreturn " . $output . ";\n"; } public function generateConfigFileRecursive($attributes, &$output = "", $depth = 1) { $output .= "array(\n"; foreach ($attributes as $attribute => $value) { if (!is_array($value)) $output .= str_repeat("\t", $depth) . "'" . $this->escape($attribute) . "' => '" . $this->escape($value) . "',\n"; else { $output .= str_repeat("\t", $depth) . "'" . $this->escape($attribute) . "' => "; $this->generateConfigFileRecursive($value, $output, $depth + 1); } } $output .= str_repeat("\t", $depth - 1) . "),\n"; } private function escape($value) { return str_replace("'", "\'", $value); } public function getAttributes() { $this->attributesRecursive($this->_config, $output); return $output; } public function attributeNames() { $this->attributesRecursive($this->_config, $output); return array_keys($output); } public function attributesRecursive($config, &$output = array(), $name = '') { foreach ($config as $key => $attribute) { if ($name == '') $paramName = $key; else $paramName = $name . "[{$key}]"; if (is_array($attribute)) $this->attributesRecursive($attribute, $output, $paramName); else $output[$paramName] = $attribute; } } public function attributeLabels() { return array( 'name' => ' ', 'params[adminEmail]' => 'Email ', 'params[phoneNumber]' => ' ', 'params[motto]' => ' ', ); } public function rules() { $rules = array(); $attributes = array_keys($this->_config); $rules[] = array(implode(', ', $attributes), 'safe'); return $rules; } }
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЯрд╛рдЗрдкреЛрд╕, рдХреГрдкрдпрд╛ рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ - рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдРрд╕реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛