Avant de présenter les composants d'interface utilisateur intégrés de Yii, voyons d'abord comment personnaliser les composants. Cela aidera également à comprendre l'utilisation de CWidget. La personnalisation des composants consiste à surcharger les méthodes init() et run() de CWidget.
class MyWidget extends CWidget{public function init(){// 此方法会被 CController::beginWidget() 调用} public function run(){// 此方法会被 CController::endWidget() 调用}}
Cet exemple définit un composant d'interface utilisateur d'entrée de plage de valeurs-RangeInputField en étendant CInputWidget, qui permet à l'utilisateur de saisir deux nombres pour définir une plage de valeurs. CInputWidget prend en charge l'utilisation de CModel ou l'utilisation directe de variables, et RangeInputField conserve également cette tradition.
RangeInputField définit trois ensembles de propriétés.
$attributeFrom et $attributeTo sont utilisés dans CModel. Avec la méthode activeXXX de CHtml, activeXXX peut générer automatiquement des étiquettes de zones de texte et des zones de texte.
Attributs $nameFrom, $nameTo, $valueFrom, $valueTo Les programmeurs peuvent définir eux-mêmes l'étiquette de la zone de texte.
Selon la structure de répertoires par défaut de l'application Yii, le RangeInputField nouvellement créé est placé dans le répertoire protected/components, donc créez protected/components/RangeInputField.php
class RangeInputField extends CInputWidget{public $attributeFrom;public $attributeTo; public $nameFrom;public $nameTo; public $valueFrom;public $valueTo; function run(){if($this->hasModel()){ echo CHtml::activeTextField($this->model, $this->attributeFrom);echo ' -> '; echo CHtml::activeTextField($this->model, $this->attributeTo);}else{echo CHtml::textField($this->nameFrom,$this->valueFrom); echo ' -> ';echo CHtml::textField($this->nameTo,$this->valueTo);}} /*** @return boolean whether this widget * is associated with a data model.*/ protected function hasModel(){return $this->model instanceof CModel&& $this->attributeFrom!==null&& $this->attributeTo!==null;}}
C'est personnalisé Un nouveau composant d'interface utilisateur, RangeInputField, surcharge uniquement la méthode run et utilise la méthode init dans sa classe parent.
Vous pouvez maintenant tester ce composant d'interface utilisateur personnalisé nouvellement créé, RangeInputField. Nous utilisons la méthode FormModel (à l'aide de CModel) pour utiliser ce composant d'interface utilisateur.
Créez RangeFrom.php
class RangeForm extends CFormModel{public $from;public $to; function rules(){return array(array('from,to','numerical','integerOnly' =>true), array('from','compare','compareAttribute'=>'to','operator'=> '<=','skipOnError' => true),);}}
sous protected/models puis modifiez la méthode par défaut du Controller par défaut, la méthode actionIndex dans protected/controllers/siteController.php.
public function actionIndex(){$success=false;$model=new RangeForm(); if(!emptyempty($_POST['RangeForm'])){$model->attributes=$_POST['RangeForm'];if($model->validate()) $success=true; } $this->render('index', array('model' => $model,'success' => $success,));}
Créez la vue correspondante
Success! beginWidget('CActiveForm'); ?> errorSummary($model); ?> widget('RangeInputField',array('model'=>$model,'attributeFrom' => 'from','attributeTo' => 'to',)) ?>endWidget(); ?>
Exécutez cet exemple
Ce qui précède est le tutoriel du framework de développement PHP Yii Framework (10 ) Contenu du composant personnalisé du composant d'interface utilisateur, veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !