Maison >développement back-end >tutoriel php >Cadre de développement PHP Tutoriel Yii Framework (10) Composants d'interface utilisateur Composants personnalisés

Cadre de développement PHP Tutoriel Yii Framework (10) Composants d'interface utilisateur Composants personnalisés

黄舟
黄舟original
2017-01-21 10:05:181213parcourir

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(&#39;from&#39;,&#39;compare&#39;,&#39;compareAttribute&#39;=>&#39;to&#39;,&#39;operator&#39;=> &#39;<=&#39;,&#39;skipOnError&#39; => 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[&#39;RangeForm&#39;])){$model->attributes=$_POST[&#39;RangeForm&#39;];if($model->validate()) $success=true;
}
$this->render(&#39;index&#39;, array(&#39;model&#39; => $model,&#39;success&#39; => $success,));}

Créez la vue correspondante

Success!
beginWidget(&#39;CActiveForm&#39;); ?>
errorSummary($model); ?>
widget(&#39;RangeInputField&#39;,array(&#39;model&#39;=>$model,&#39;attributeFrom&#39; => &#39;from&#39;,&#39;attributeTo&#39; => &#39;to&#39;,)) ?>endWidget(); ?>

Exécutez cet exemple

Cadre de développement PHP Tutoriel Yii Framework (10) Composants dinterface utilisateur Composants personnalisés

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 !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn