>php教程 >PHP开发 >Yii2.0 애플리케이션 구조 위젯

Yii2.0 애플리케이션 구조 위젯

伊谢尔伦
伊谢尔伦원래의
2016-11-25 14:16:111198검색

위젯은 객체 지향 접근 방식을 사용하여 복잡하고 구성 가능한 사용자 인터페이스 단위를 만들기 위해 뷰에서 사용되는 재사용 가능한 단위입니다. 예를 들어, 날짜 선택기 위젯은 사용자가 날짜를 선택할 수 있는 우아한 날짜 선택기를 생성할 수 있습니다. 뷰에 다음 코드만 삽입하면 됩니다.

<?php 
use yii\jui\DatePicker;
?>
<?= DatePicker::widget([&#39;name&#39; => &#39;date&#39;]) ?>

Yii는 [ [yiiwidgetsActiveForm|활성 양식]], [yiiwidgetsMenu|메뉴]], jQuery UI 위젯, Twitter Bootstrap 위젯. 다음으로 위젯에 대한 기본 지식을 소개하겠습니다. 특정 위젯에 대해 더 자세히 알고 싶다면 해당 클래스 API 문서를 참고하세요.

위젯 사용

뷰에서는 기본적으로 위젯이 사용되며, 뷰에서 [[yiibaseWidget::widget()]] 메소드를 호출하여 위젯을 사용할 수 있습니다. 이 메소드는 구성 배열을 사용하여 위젯을 초기화하고 위젯이 렌더링된 결과를 반환합니다. 예를 들어 다음 코드는 러시아어를 사용하도록 구성된 날짜 선택기 위젯을 삽입하고 입력 상자 내용은 $model의 from_date 속성 값입니다.

<?php
use yii\jui\DatePicker;
?>
<?= DatePicker::widget([    
&#39;model&#39; => $model,    
&#39;attribute&#39; => &#39;from_date&#39;,    
&#39;language&#39; => &#39;ru&#39;,    
&#39;clientOptions&#39; => [        
&#39;dateFormat&#39; => &#39;yy-mm-dd&#39;,    
],]) 
?>

일부 위젯은 [[yiibaseWidget::begin()]] 및 [[yiibaseWidget::end()]] 호출에서 데이터 콘텐츠를 사용할 수 있습니다. 일부 위젯은 호출 사이에 포함되어야 하는 콘텐츠 블록을 사용할 수 있습니다. 예를 들어 다음 코드는 [[yiiwidgetsActiveForm]] 위젯을 사용하여 로그인 양식을 생성합니다. 그 사이의 모든 코드도 렌더링됩니다.

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
?>
<?php $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); ?>

    <?= $form->field($model, &#39;username&#39;) ?>

    <?= $form->field($model, &#39;password&#39;)->passwordInput() ?>

    <div class="form-group">
        <?= Html::submitButton(&#39;Login&#39;) ?>
    </div><?php ActiveForm::end(); ?>

[[yiibaseWidget::widget()]]을 호출하여 반환되는 렌더링 결과가 다르다는 점에 유의하세요. [[yiibaseWidget::begin()]] 메서드를 호출하면 조립할 수 있는 위젯 인스턴스가 반환됩니다. 위젯 콘텐츠.

위젯 만들기

[[yiibaseWidget]] 클래스를 상속하고 [[yiibaseWidget::init()]] 및/또는 [[yiibaseWidget::run()]] 메서드를 재정의하여 다음을 수행합니다. 위젯을 만듭니다. 일반적으로 init() 메서드는 위젯 속성을 처리하고 run() 메서드에는 위젯이 렌더링 결과를 생성하는 코드가 포함되어 있습니다. 렌더링 결과는 run() 메서드에서 직접 "반향" 출력되거나 문자열로 반환될 수 있습니다.

다음 코드의 HelloWidget은 메시지 속성에 할당된 값을 인코딩하여 표시합니다. 속성에 값이 할당되지 않으면 기본적으로 "Hello World"가 표시됩니다.

namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget{
   public $message;

   public function init()
   {
       parent::init();
       if ($this->message === null) {
           $this->message = &#39;Hello World&#39;;
       }
   }

   public function run()
   {
       return Html::encode($this->message);
   }}

이 위젯을 사용하려면 뷰에서 다음 코드를 사용하세요.

<?php
use app\components\HelloWidget;
?>
<?= HelloWidget::widget([&#39;message&#39; => &#39;Good morning&#39;]) ?>

다음은 start() 및 end()에서 HelloWidget을 호출하는 데 사용할 수 있는 또 다른 코드입니다. 을 클릭하면 HTML로 인코딩된 콘텐츠가 표시됩니다.

namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget{
   public function init()
   {
       parent::init();
       ob_start();
   }

   public function run()
   {
       $content = ob_get_clean();
       return Html::encode($content);
   }}

위와 같이 PHP 출력 버퍼링은 init()에서 시작되고 init()와 run() 메서드 사이의 모든 출력 내용을 가져와 처리하고 run()에서 반환합니다.

보충: [[yiibaseWidget::begin()]]을 호출하면 새 위젯 인스턴스가 생성되고 생성이 끝나면 init() 메서드가 호출됩니다. end() ) 메서드에서 호출하고 반환 결과를 출력합니다.

다음 코드는 이 HelloWidget을 사용하는 방법을 보여줍니다.

<?php
use app\components\HelloWidget;
?>
<?php HelloWidget::begin(); ?>
       content that may contain <tag>&#39;s
<?php HelloWidget::end(); ?>

때때로 위젯이 많은 콘텐츠를 렌더링해야 할 경우, 더 좋은 방법은 콘텐츠를 보기 파일에 넣는 것입니다. 그런 다음 [ [yiibaseWidget::render()]] 메서드를 호출하면 보기 파일이 렌더링됩니다. 예:

public function run(){
    return $this->render(&#39;hello&#39;);}

위젯의 보기 파일은 기본적으로 WidgetPath/views 디렉터리에 저장되며 WidgetPath 위젯 클래스 파일이 위치한 디렉토리를 나타냅니다. 위 예제 위젯 클래스 파일이 @app/comComponents 아래에 있으면 @app/comComponents/views/hello.php 뷰 파일이 렌더링됩니다. [[yiibaseWidget::getViewPath()]] 메서드를 재정의하여 뷰 파일의 경로를 맞춤설정할 수 있습니다.

모범 사례

위젯은 뷰 코드를 재사용하는 객체 지향 방법입니다.

위젯을 생성할 때는 여전히 MVC 패턴을 따라야 합니다. 일반적으로 로직 코드는 위젯 클래스에 있고 표시 콘텐츠는 뷰에 있습니다.

위젯은 독립적으로 설계되어야 합니다. 즉, 위젯을 사용할 때 추가 처리 없이 바로 삭제할 수 있습니다. 하지만 위젯에 CSS, JavaScript, 이미지 등과 같은 외부 리소스가 필요한 경우 까다로울 수 있습니다. 다행히 Yii는 이 문제를 해결하기 위한 리소스 패키지를 제공합니다.

위젯에 뷰 코드만 포함된 경우 뷰와 매우 유사합니다. 실제로 이 경우 유일한 차이점은 위젯은 재사용 가능한 클래스이고 뷰는 사용되는 일반 PHP 스크립트라는 것입니다. 응용 프로그램에서.


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