Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwicklungsframework Yii Framework-Tutorial (10) UI-Komponenten, benutzerdefinierte Komponenten

PHP-Entwicklungsframework Yii Framework-Tutorial (10) UI-Komponenten, benutzerdefinierte Komponenten

黄舟
黄舟Original
2017-01-21 10:05:181195Durchsuche

Bevor wir die integrierten UI-Komponenten von Yii vorstellen, stellen wir zunächst vor, wie Komponenten angepasst werden. Dies hilft auch dabei, die Verwendung von CWidget zu verstehen, indem die Methoden init() und run() von CWidget überladen werden.

class MyWidget extends CWidget{public function init(){// 此方法会被 CController::beginWidget() 调用}
public function run(){// 此方法会被 CController::endWidget() 调用}}

In diesem Beispiel wird die UI-Komponente „RangeInputField“ für die Wertebereichseingabe durch Erweiterung von CInputWidget definiert, die es dem Benutzer ermöglicht, zwei Zahlen einzugeben, um einen Wertebereich zu definieren. CInputWidget unterstützt die Verwendung von CModel oder die direkte Verwendung von Variablen, und RangeInputField behält diese Tradition ebenfalls bei.

RangeInputField definiert drei Sätze von Eigenschaften.

$attributeFrom und $attributeTo werden in CModel verwendet. Mit der activeXXX-Methode von CHtml kann activeXXX automatisch Textfeldbeschriftungen und Textfelder generieren.

Attribute $nameFrom, $nameTo, $valueFrom, $valueTo. Programmierer können die Beschriftung des Textfelds selbst definieren.

Gemäß der Standardverzeichnisstruktur der Yii-Anwendung wird das neu erstellte RangeInputField im Verzeichnis protected/components abgelegt, also erstellen Sie 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;}}

Dies ist Angepasst Eine neue UI-Komponente, RangeInputField, überlädt nur die Ausführungsmethode und verwendet die Init-Methode in ihrer übergeordneten Klasse.

Jetzt können Sie diese neu erstellte benutzerdefinierte UI-Komponente RangeInputField testen. Wir verwenden die FormModel-Methode (mit CModel), um diese UI-Komponente zu verwenden.

Erstellen Sie 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),);}}

unter protected/models und ändern Sie dann die Standardmethode des Standard-Controllers, die actionIndex-Methode in 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,));}

Erstellen Sie die entsprechende Ansicht

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(); ?>

Führen Sie dieses Beispiel aus

PHP-Entwicklungsframework Yii Framework-Tutorial (10) UI-Komponenten, benutzerdefinierte Komponenten

Das Obige ist das Tutorial zum PHP-Entwicklungsframework Yii Framework (10) Benutzerdefinierte Komponenteninhalte für UI-Komponenten. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn