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 = 'Login'; ?> <h1><?= Html::encode($this->title) ?></h1> <p>Please fill out the following fields to login:</p> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password')->passwordInput() ?> <?= Html::submitButton('Login') ?> <?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.
/** * @param string $view 视图名或文件路径,由实际的渲染方法决定 * @param array $params 传递给视图的数据 * @return string 渲染结果 */ methodName($view, $params = [])
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('view', [ 'model' => $model, ]); } }
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.
<?php $this->beginWidget('path.to.WidgetClass'); ?> ...可能会由小物件获取的内容主体... <?php $this->endWidget(); ?>
<?php $this->widget('path.to.WidgetClass'); ?>
<?php $this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' )); ?>
class MyWidget extends CWidget { public function init() { // 此方法会被 CController::beginWidget() 调用 } public function run() { // 此方法会被 CController::endWidget() 调用 } }
yii\web\View::renderAjax(): 渲染一个 视图名 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。
yii\base\View::renderFile(): 渲染一个视图文件目录或别名下的视图文件。
例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 yii\base\View 组件:
<?= $this->render('_overview') ?>
其他地方渲染
在任何地方都可以通过表达式 Yii::$app->view 访问 yii\base\View 应用组件, 调用它的如前所述的方法渲染视图,例如:
// 显示视图文件 "@app/views/site/license.php" echo \Yii::$app->view->renderFile('@app/views/site/license.php');
更多PHP的Yii框架中创建视图和渲染视图的方法详解相关文章请关注PHP中文网!