Heim > php教程 > PHP开发 > Yii2.0-Anwendungsstruktur-Widget

Yii2.0-Anwendungsstruktur-Widget

伊谢尔伦
Freigeben: 2016-11-25 14:16:11
Original
1189 Leute haben es durchsucht

Widgets sind wiederverwendbare Einheiten, die in Ansichten verwendet werden, um mithilfe eines objektorientierten Ansatzes komplexe und konfigurierbare Benutzeroberflächeneinheiten zu erstellen. Das Datumsauswahl-Widget kann beispielsweise eine elegante Datumsauswahl generieren, mit der Benutzer Daten auswählen können. Sie müssen nur den folgenden Code in die Ansicht einfügen:

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

Yii bietet viele hervorragende Widgets, wie zum Beispiel [. [yiiwidgetsActiveForm|aktives Formular]], [yiiwidgetsMenu|menu]], jQuery-UI-Widgets, Twitter-Bootstrap-Widgets. Als nächstes stellen wir die Grundkenntnisse von Widgets vor. Wenn Sie mehr über ein bestimmtes Widget erfahren möchten, lesen Sie bitte das entsprechende Klassen-API-Dokument.

Widgets verwenden

Widgets werden grundsätzlich in Ansichten verwendet, und die Methode [[yiibaseWidget::widget()]] kann in Ansichten aufgerufen werden, um Widgets zu verwenden. Diese Methode initialisiert das Widget mithilfe des Konfigurationsarrays und gibt das Ergebnis des gerenderten Widgets zurück. Der folgende Code fügt beispielsweise ein Datumsauswahl-Widget ein, das für die Verwendung von Russisch konfiguriert ist, und der Inhalt des Eingabefelds ist der Wert des from_date-Attributs von $model.

<?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;,    
],]) 
?>
Nach dem Login kopieren

Einige Widgets können Dateninhalte in [[yiibaseWidget::begin()]]- und [[yiibaseWidget::end()]]-Aufrufen verwenden. Einige Widgets können einen Inhaltsblock annehmen, der zwischen dem Aufruf von eingeschlossen werden sollte. Der folgende Code verwendet beispielsweise das Widget [[yiiwidgetsActiveForm]], um ein Anmeldeformular zu generieren. Das Widget generiert < und jeglicher Code dazwischen wird ebenfalls gerendert.

<?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(); ?>
Nach dem Login kopieren

Beachten Sie, dass das durch den Aufruf von [[yiibaseWidget::widget()]] zurückgegebene Rendering-Ergebnis unterschiedlich ist. Der Aufruf der Methode [[yiibaseWidget::begin()]] gibt eine Widget-Instanz zurück, die assembliert werden kann der Widget-Inhalt.

Widgets erstellen

Erben Sie die Klasse [[yiibaseWidget]] und überschreiben Sie die Methoden [[yiibaseWidget::init()]] und/oder [[yiibaseWidget::run()]] Widgets erstellen. Normalerweise verarbeitet die init()-Methode Widget-Eigenschaften und die run()-Methode enthält den Code für das Widget zum Generieren von Rendering-Ergebnissen. Das Rendering-Ergebnis kann direkt in der run()-Methode ausgegeben oder als String zurückgegeben werden.

Das HelloWidget im folgenden Code ist codiert und zeigt den dem Nachrichtenattribut zugewiesenen Wert an. Wenn dem Attribut kein Wert zugewiesen ist, wird standardmäßig „Hello World“ angezeigt.

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);
   }}
Nach dem Login kopieren

Um dieses Widget zu verwenden, verwenden Sie einfach den folgenden Code in der Ansicht:

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

Das Folgende ist ein weiterer, der in begin()- und end()-Aufrufen von HelloWidget verwendet werden kann , der HTML-kodierte Inhalt wird dann angezeigt.

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);
   }}
Nach dem Login kopieren

Wie oben gezeigt, wird die PHP-Ausgabepufferung in init() gestartet und der gesamte Ausgabeinhalt zwischen den Methoden init() und run() wird in run() abgerufen, verarbeitet und zurückgegeben.

Ergänzung: Wenn Sie [[yiibaseWidget::begin()]] aufrufen, wird eine neue Widget-Instanz erstellt und die init()-Methode wird am Ende der Konstruktion aufgerufen Rufen Sie die Methode end() auf und geben Sie das Rückgabeergebnis aus.

Der folgende Code zeigt, wie dieses HelloWidget verwendet wird:

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

Manchmal muss das Widget eine Menge Inhalt rendern, eine bessere Möglichkeit besteht darin, den Inhalt in eine Ansichtsdatei zu legen, und Rufen Sie dann auf [ Die Methode [yiibaseWidget::render()]] rendert die Ansichtsdatei, zum Beispiel:

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

Die Ansichtsdatei des Widgets wird standardmäßig im Verzeichnis WidgetPath/views und WidgetPath gespeichert stellt das Verzeichnis dar, in dem sich die Widget-Klassendatei befindet. Wenn sich die obige Beispiel-Widget-Klassendatei unter @app/components befindet, wird die Ansichtsdatei @app/components/views/hello.php gerendert. Sie können die Methode [[yiibaseWidget::getViewPath()]] überschreiben, um den Pfad der Ansichtsdatei anzupassen.

Best Practices

Widgets sind eine objektorientierte Möglichkeit, Ansichtscode wiederzuverwenden.

Sie müssen beim Erstellen von Widgets weiterhin dem MVC-Muster folgen. Normalerweise befindet sich der Logikcode in der Widget-Klasse und der Anzeigeinhalt in der Ansicht.

Widgets sollten so konzipiert sein, dass sie unabhängig sind. Das heißt, wenn Sie ein Widget verwenden, können Sie es ohne zusätzliche Verarbeitung direkt verwerfen. Es kann jedoch schwierig sein, wenn Widgets externe Ressourcen wie CSS, JavaScript, Bilder usw. erfordern. Glücklicherweise stellt Yii Ressourcenpakete zur Verfügung, um dieses Problem zu lösen.

Wenn ein Widget nur Ansichtscode enthält, ist es einer Ansicht sehr ähnlich. Tatsächlich besteht in diesem Fall der einzige Unterschied darin, dass das Widget eine wiederverwendbare Klasse ist und die Ansicht nur ein normales PHP-Skript verwendet in der Bewerbung.


Verwandte Etiketten:
yii
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage