>백엔드 개발 >PHP 튜토리얼 >PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(10) UI 구성 요소 사용자 정의 구성 요소

PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(10) UI 구성 요소 사용자 정의 구성 요소

黄舟
黄舟원래의
2017-01-21 10:05:181192검색

Yii에 내장된 UI 구성 요소를 소개하기 전에 먼저 구성 요소를 사용자 정의하는 방법을 소개하겠습니다. 이는 CWidget의 사용법을 이해하는 데에도 도움이 됩니다.

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

이 예제는 CInputWidget을 확장하여 값 범위 입력 UI 구성 요소인 RangeInputField를 정의합니다. 이를 통해 사용자는 두 개의 숫자를 입력하여 값 범위를 정의할 수 있습니다. CInputWidget은 CModel 사용이나 변수 직접 사용을 지원하며 RangeInputField도 이러한 전통을 유지합니다.

RangeInputField는 세 가지 속성 세트를 정의합니다.

$attributeFrom 및 $attributeTo는 CModel에서 사용되며 CHtml의 activeXXX 메서드를 사용하면 activeXXX가 자동으로 텍스트 상자 레이블과 텍스트 상자를 생성할 수 있습니다.

$nameFrom, $nameTo, $valueFrom, $valueTo 속성 프로그래머는 텍스트 상자의 레이블을 직접 정의할 수 있습니다.

Yii 애플리케이션의 기본 디렉토리 구조에 따라 새로 생성된 RangeInputField는 protected/comComponents 디렉토리에 위치하므로 protected/comComponents/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;}}

를 생성하세요. 이렇게 하면 사용자 정의할 수 있습니다. 새로운 UI 구성 요소 RangeInputField는 run 메서드만 오버로드하고 상위 클래스의 init 메서드를 사용합니다.

이제 새로 생성된 사용자 정의 UI 구성 요소 RangeInputField를 테스트할 수 있습니다. FormModel(CModel 사용) 메서드를 사용하여 이 UI 구성 요소를 사용합니다.

protected/models 아래에 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),);}}

를 생성한 다음 기본 컨트롤러의 기본 메서드인 protected/controllers/siteController.php의 actionIndex 메서드를 수정합니다.

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

해당 View 생성

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

이 예제 실행

PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(10) UI 구성 요소 사용자 정의 구성 요소

위는 PHP 개발 프레임워크 Yii Framework 튜토리얼(10) UI입니다. 컴포넌트 자체 컴포넌트의 내용을 정의해 보세요. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.