Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Methoden zum Erstellen von Ansichten und Rendern von Ansichten im Yii-Framework von PHP

Detaillierte Erläuterung der Methoden zum Erstellen von Ansichten und Rendern von Ansichten im Yii-Framework von PHP

高洛峰
高洛峰Original
2017-02-06 17:25:431312Durchsuche

Ansichten sind Teil des MVC-Musters. Es handelt sich um den Code, der Endbenutzern Daten anzeigt. Die Ansichtsvorlage ist eine PHP-Skriptdatei, die hauptsächlich HTML-Code enthält und über die yiiwebView-Anwendungskomponente verwaltet wird , das hauptsächlich generische Methoden bereitstellt, die beim Erstellen und Rendern von Ansichten helfen, nennen wir die Ansichtsvorlage oder Ansichtsvorlagendatei eine Ansicht.

Ansicht erstellen

Wie oben erwähnt, handelt es sich bei der Ansicht um ein PHP-Skript, das HTML und PHP-Code enthält. Sie können sehen, dass der PHP-Code verwendet wird Um dynamische Inhalte wie Seitentitel und Formular zu generieren, organisiert HTML-Code diese in einer schönen HTML-Seite.

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
 
/* @var $this yii\web\View */
/* @var $form yii\widgets\ActiveForm */
/* @var $model app\models\LoginForm */
 
$this->title = &#39;Login&#39;;
?>
<h1><?= Html::encode($this->title) ?></h1>
 
<p>Please fill out the following fields to login:</p>
 
<?php $form = ActiveForm::begin(); ?>
  <?= $form->field($model, &#39;username&#39;) ?>
  <?= $form->field($model, &#39;password&#39;)->passwordInput() ?>
  <?= Html::submitButton(&#39;Login&#39;) ?>
<?php ActiveForm::end(); ?>

In der Ansicht können Sie auf $this zugreifen, um auf yiiwebView zu verweisen und diese Ansichtsdatei zu verwalten und zu rendern.

Zusätzlich zu $this verfügt die Ansicht im obigen Beispiel über weitere vordefinierte Variablen wie $model. Diese Variablen stellen Daten dar, die vom Controller oder anderen Objekten an die Ansicht übergeben werden und das Rendern der Ansicht auslösen.

Tipp: Listen Sie die vordefinierten Variablen im Header-Kommentar der Ansichtsdatei auf, damit sie vom IDE-Editor erkannt werden können. Dies ist auch eine gute Möglichkeit, Ansichtsdokumente zu generieren.
Sicherheit

Beim Erstellen von Ansichten, die HTML-Seiten generieren, ist es wichtig, Benutzereingabedaten vor der Anzeige zu transkodieren und zu filtern, da Ihre Anwendung sonst möglicherweise anfällig für Cross-Site-Scripting-Angriffe ist.

Um einfachen Text anzuzeigen, rufen Sie zunächst yiihelpersHtml::encode() zur Transkodierung auf. Beispielsweise transkodiert der folgende Code den Benutzernamen vor der Anzeige:

<?php
use yii\helpers\Html;
?>
 
<div class="username">
  <?= Html::encode($user->name) ?>
</div>

Um HTML-Inhalte anzuzeigen, rufen Sie zuerst auf yiihelpersHtmlPurifier zum Filtern des Inhalts Der folgende Code filtert beispielsweise den übermittelten Inhalt, bevor er angezeigt wird:

<?php
use yii\helpers\HtmlPurifier;
?>
 
<div class="post">
  <?= HtmlPurifier::process($post->text) ?>
</div>

Tipp: HTMLPurifier leistet gute Arbeit bei der Gewährleistung der Sicherheit der Ausgabedaten, seine Leistung ist jedoch gering nicht gut. Wenn Ihre Anwendung eine hohe Leistung benötigt, sollten Sie die gefilterten Ergebnisse zwischenspeichern.

Ansichten organisieren

Ähnlich wie bei Controllern und Modellen gibt es einige Konventionen zum Organisieren von Ansichten:

Von Controllern gerenderte Ansichtsdateien werden standardmäßig unter @app/views/ControllerID platziert Verzeichnis, wobei ControllerID der Controller-ID entspricht. Die Controller-Klasse ist beispielsweise PostController, das Ansichtsdateiverzeichnis sollte @app/views/post sein und das der Controller-Klasse PostCommentController entsprechende Verzeichnis ist @app/views/post-comment . Wenn es sich in einem Modul-Controller befindet, sollte das Verzeichnis das Verzeichnis „views/ControllerID“ unter dem Modulverzeichnis „yiibaseModule::basePath“ sein.
Für das Widget-Rendering werden die Ansichtsdateien standardmäßig im Verzeichnis „WidgetPath/views“ abgelegt stellt das Verzeichnis dar, in dem sich die Widget-Klassendatei befindet; Für Ansichtsdateien, die von anderen Objekten gerendert werden, wird empfohlen, ähnliche Regeln wie für Widgets zu befolgen.
Sie können die Methode yiibaseViewContextInterface::getViewPath() eines Controllers oder Widgets überschreiben, um das Standardverzeichnis für Ansichtsdateien anzupassen.

Ansicht rendern

Sie können die Methode „Ansicht rendern“ in einem Controller, Widget oder anderswo aufrufen, um eine Ansicht zu rendern. Die Methode ähnelt dem folgenden Format:

/**
 * @param string $view 视图名或文件路径,由实际的渲染方法决定
 * @param array $params 传递给视图的数据
 * @return string 渲染结果
 */
methodName($view, $params = [])
Controller-Rendering im Controller

Im Controller können die folgenden Controller-Methoden aufgerufen werden, um die Ansicht zu rendern:

yiibaseController::render(): Einen Ansichtsnamen rendern und das Rendering zurückgeben Ergebnis anhand eines Layouts.

yiibaseController::renderPartial(): Rendert einen Ansichtsnamen und verwendet kein Layout.

yiiwebController::renderAjax(): Rendert einen Ansichtsnamen ohne Verwendung des Layouts und fügt alle registrierten JS/CSS-Skripte und -Dateien ein, die normalerweise als Antwort auf AJAX-Webanfragen verwendet werden.

yiibaseController::renderFile(): Rendern einer Ansichtsdatei in einem Ansichtsdateiverzeichnis oder Alias.

Zum Beispiel:

namespace app\controllers;
 
use Yii;
use app\models\Post;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
 
class PostController extends Controller
{
  public function actionView($id)
  {
    $model = Post::findOne($id);
    if ($model === null) {
      throw new NotFoundHttpException;
    }
 
    // 渲染一个名称为"view"的视图并使用布局
    return $this->render(&#39;view&#39;, [
      &#39;model&#39; => $model,
    ]);
  }
}
Widget

Ein Widget ist eine Instanz von CWidget oder seiner Unterklasse. Es handelt sich um eine Komponente, die hauptsächlich zur Darstellung von Daten verwendet wird. Widgets werden normalerweise in eine Ansicht eingebettet Um eine komplexe und unabhängige Benutzeroberfläche zu generieren, können Widgets verwendet werden, um die Benutzeroberfläche wiederverwendbar zu machen.

Wir können das folgende Ansichtsskript verwenden, um ein Widget zu verwenden :

<?php $this->beginWidget(&#39;path.to.WidgetClass&#39;); ?>
...可能会由小物件获取的内容主体...
<?php $this->endWidget(); ?>
oder

<?php $this->widget(&#39;path.to.WidgetClass&#39;); ?>
Letzteres wird für Komponenten verwendet, die keinen Textkörperinhalt erfordern. Das

-Widget kann über die Konfiguration angepasst werden Dies geschieht durch Aufrufen von CBaseController::beginWidget oder CBaseController::widget, um den Wert seiner Initialisierungseigenschaft festzulegen. Wenn wir beispielsweise das CMaskedTextField-Widget verwenden, möchten wir die verwendete Maske angeben (kann als Ausgabeformat verstanden werden, Anmerkung des Übersetzers). Tun Sie dies, indem Sie ein Array mit den Initialisierungswerten dieser Eigenschaften übergeben. Der Schlüssel des Arrays ist hier der Name der Eigenschaft, und der Wert des Arrays ist der Wert, der der Eigenschaft des kleinen Objekts entspricht :

<?php
$this->widget(&#39;CMaskedTextField&#39;,array(
  &#39;mask&#39;=>&#39;99/99/9999&#39;
));
?>
CWidget erben und seine init()- und run()-Methoden überschreiben, um ein neues Widget zu definieren:

class MyWidget extends CWidget
{
  public function init()
  {
    // 此方法会被 CController::beginWidget() 调用
  }
  
  public function run()
  {
    // 此方法会被 CController::endWidget() 调用
  }
}
Das Widget kann ein eigenes Widget wie eine Controller-Ansicht haben. Standardmäßig befinden sich die Ansichtsdateien von Widgets im Unterverzeichnis „views“ des Verzeichnisses, das die Widget-Klassendateien enthält. Diese Ansichten können durch Aufrufen von CWidget::render() gerendert werden, was dem Controller sehr ähnlich ist. Die Widget-Ansicht bietet keine Unterstützung für Layoutdateien. Darüber hinaus verweist $this in der Widget-Ansicht auf die Widget-Instanz und nicht auf die Controller-Instanz.

Rendern in einer Ansicht

Sie können eine andere Ansicht in einer Ansicht rendern, indem Sie die folgenden Methoden aufrufen, die von der yiibaseView-Ansichtskomponente bereitgestellt werden:

yiibaseView::render(): Render ein Ansichtsname.

yii\web\View::renderAjax(): 渲染一个 视图名 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。

yii\base\View::renderFile(): 渲染一个视图文件目录或别名下的视图文件。

例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 yii\base\View 组件:

<?= $this->render(&#39;_overview&#39;) ?>

其他地方渲染

在任何地方都可以通过表达式 Yii::$app->view 访问 yii\base\View 应用组件, 调用它的如前所述的方法渲染视图,例如:

// 显示视图文件 "@app/views/site/license.php"
echo \Yii::$app->view->renderFile(&#39;@app/views/site/license.php&#39;);

更多PHP的Yii框架中创建视图和渲染视图的方法详解相关文章请关注PHP中文网!

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