《PHP实例:PHP的Yii框架中创建视图和渲染视图的方法详解》要点:
本文介绍了PHP实例:PHP的Yii框架中创建视图和渲染视图的方法详解,希望对您有用。如果有疑问,可以联系我们。
相关主题:YII框架
PHP学习视图是 MVC 模式中的一部分. 它是展示数据到终端用户的代码,在网页应用中,根据视图模板来创建视图,视图模板为PHP脚本文件, 主要包含HTML代码和展示类PHP代码,通过yii\web\View应用组件来管理, 该组件主要提供通用办法帮助视图构造和渲染,简单起见,我们称视图模板或视图模板文件为视图.
PHP学习创立视图
PHP学习如前所述,视图为包括HTML和PHP代码的PHP脚本,如下代码为一个登录表单的视图, 可看到PHP代码用来生成动态内容如页面标题和表单,HTML代码把它组织成一个漂亮的HTML页面.
PHP学习
<?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(); ?>
PHP学习在视图中,可拜访 $this 指向 yii\web\View 来管理和渲染这个视图文件.
PHP学习除了 $this之外,上述示例中的视图有其他预界说变量如 $model, 这些变量代表从控制器或其他触发视图渲染的对象 传入 到视图的数据.
PHP学习技巧: 将预定义变量列到视图文件头部注释处,这样可被IDE编辑器识别,也是生成视图文档的好方法.
平安
PHP学习当创建生成HTML页面的视图时,在显示之前将用户输入数据进行转码和过滤非常重要, 不然,你的应用可能会被跨站脚本 攻击.
PHP学习要显示纯文本,先挪用 yii\helpers\Html::encode() 进行转码,例如如下代码将用户名在显示前先转码:
PHP学习
<?php
use yii\helpers\Html;
?>
<div class="username">
<?= Html::encode($user->name) ?>
</div>
PHP学习要显示HTML内容,先挪用 yii\helpers\HtmlPurifier 过滤内容,例如如下代码将提交内容在显示前先过滤:
PHP学习
<?php
use yii\helpers\HtmlPurifier;
?>
<div class="post">
<?= HtmlPurifier::process($post->text) ?>
</div>
PHP学习技巧:HTMLPurifier在保证输出数据平安上做的不错,但性能不佳,如果你的应用需要高性能可考虑 缓存 过滤后的结果.
PHP进修组织视图
PHP学习与 节制器 和 模型 类似,在组织视图上有一些约定:
PHP学习控制器渲染的视图文件默认放在 @app/views/ControllerID 目录下, 其中 ControllerID 对应 控制器 ID, 例如控制器类为PostController,视图文件目录应为 @app/views/post, 控制器类 PostCommentController对应的目录为@app/views/post-comment, 如果是模块中的控制器,目录应为 yii\base\Module::basePath 模块目录下的views/ControllerID 目录;
对于 小部件 渲染的视图文件默认放在 WidgetPath/views 目录, 其中 WidgetPath 代表小部件类文件所在的目录;
对于其他对象渲染的视图文件,建议遵循和小部件相似的规则.
可覆盖控制器或小部件的 yii\base\ViewContextInterface::getViewPath() 办法来自定义视图文件默认目录.
PHP学习衬着视图
PHP学习可在 控制器, 小部件, 或其他地方调用渲染视图办法来渲染视图, 该办法类似以下格式:
PHP学习
/**
* @param string $view 视图名或文件路径,由实际的渲染办法决定
* @param array $params 传递给视图的数据
* @return string 渲染结果
*/
methodName($view, $params = [])
PHP学习控制器中渲染
PHP学习在 控制器 中,可调用以下控制器办法来渲染视图:
PHP学习例如:
PHP学习
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,
]);
}
}
PHP学习小物件
小物件是 CWidget 或其子类的实例.它是一个主要用于表示数据的组件.小物件通常内嵌于一个视图来产生一些复杂而独立的用户界面.例如,一个日历小物件可用于渲染一个复杂的日历界面.小物件使用户界面更加可复用.
PHP学习我们可以按如下视图脚原来使用一个小物件:
PHP进修
<?php $this->beginWidget('path.to.WidgetClass'); ?>
...可能会由小物件获取的内容主体...
<?php $this->endWidget(); ?>
PHP进修或者
PHP学习
<?php $this->widget('path.to.WidgetClass'); ?>
PHP学习后者用于不必要任何 body 内容的组件.
PHP学习小物件可通过配置来定制它的表示.这是通过调用 CBaseController::beginWidget 或 CBaseController::widget 设置其初始化属性值来完成的.例如,当使用 CMaskedTextField 小物件时,我们想指定被使用的 mask (可理解为一种输出格式,译者注).我们通过传递一个携带这些属性初始化值的数组来实现.这里的数组的键是属性的名称,而数组的值则是小物件属性所对应的值.正如以下所示 :
PHP学习
<?php
$this->widget('CMaskedTextField',array(
'mask'=>'99/99/9999'
));
?>
PHP学习继承 CWidget 并覆盖其init() 和 run() 办法,可以定义一个新的小物件:
PHP学习
class MyWidget extends CWidget
{
public function init()
{
// 此办法会被 CController::beginWidget() 调用
}
public function run()
{
// 此办法会被 CController::endWidget() 调用
}
}
PHP学习小物件可以像一个控制器一样拥有它自己的视图.默认情况下,小物件的视图文件位于包含了小物件类文件目录的 views 子目录之下.这些视图可以通过调用 CWidget::render() 渲染,这一点和控制器很相似.唯一不同的是,小物件的视图没有布局文件支持.另外,小物件视图中的$this指向小物件实例而不是控制器实例.
PHP学习视图中衬着
PHP学习可以在视图中渲染另一个视图,可以调用yii\base\View视图组件提供的以下办法:
PHP学习例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 yii\base\View 组件:
PHP学习
<?= $this->render('_overview') ?>
PHP学习其他处所渲染
PHP学习在任何地方都可以通过表达式 Yii::$app->view 拜访 yii\base\View 应用组件, 调用它的如前所述的方法渲染视图,例如:
PHP进修
// 显示视图文件 "@app/views/site/license.php"
echo \Yii::$app->view->renderFile('@app/views/site/license.php');
欢迎参与《PHP实例:PHP的Yii框架中创建视图和渲染视图的方法详解》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7206.html