当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

视图(Views)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:28:30

由  创建, 最后一次修改 2016-02-24 视图视图是?MVC?模式中的一部分。 它是展示数据到终端用户的代码,在网页应用中,根据视图模板来创建视图,视图模板为PHP脚本文件, 主要包含HTML代码和展示类PHP代码,通过yii\web\View应用组件来管理, 该组件主要提供通用方法帮助视图构造和渲染,简单起见,我们称视图模板或视图模板文件为视图。创建视图如前所述,视图为包含HTML和PHP代码的PHP脚本,如下代码为一个登录表单的视图, 可看到PHP代码用来生成动态内容如页面标题和表单,HTML代码把它组织成一个漂亮的HTML页面。<?phpuse 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(); ?>在视图中,可访问?$this?指向 yii\web\View 来管理和渲染这个视图文件。除了?$this之外,上述示例中的视图有其他预定义变量如?$model, 这些变量代表从控制器或其他触发视图渲染的对象?传入?到视图的数据。技巧: 将预定义变量列到视图文件头部注释处,这样可被IDE编辑器识别,也是生成视图文档的好方法。安全当创建生成HTML页面的视图时,在显示之前将用户输入数据进行转码和过滤非常重要, 否则,你的应用可能会被跨站脚本?攻击。要显示纯文本,先调用 yii\helpers\Html::encode() 进行转码,例如如下代码将用户名在显示前先转码:<?phpuse yii\helpers\Html;?><div class="username"> <?= Html::encode($user->name) ?></div>要显示HTML内容,先调用 yii\helpers\HtmlPurifier 过滤内容,例如如下代码将提交内容在显示前先过滤:<?phpuse yii\helpers\HtmlPurifier;?><div class="post"> <?= HtmlPurifier::process($post->text) ?></div>技巧:HTMLPurifier在保证输出数据安全上做的不错,但性能不佳,如果你的应用需要高性能可考虑?缓存?过滤后的结果。组织视图与?控制器?和?模型?类似,在组织视图上有一些约定:控制器渲染的视图文件默认放在?@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() 方法来自定义视图文件默认目录。渲染视图可在?控制器,?小部件, 或其他地方调用渲染视图方法来渲染视图, 该方法类似以下格式:/** * @param string $view 视图名或文件路径,由实际的渲染方法决定 * @param array $params 传递给视图的数据 * @return string 渲染结果 */methodName($view, $params = [])控制器中渲染在?控制器?中,可调用以下控制器方法来渲染视图:yii\base\Controller::render(): 渲染一个?视图名?并使用一个?布局?返回到渲染结果。yii\base\Controller::renderPartial(): 渲染一个?视图名?并且不使用布局。yii\web\Controller::renderAjax(): 渲染一个?视图名?并且不使用布局, 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。yii\base\Controller::renderFile(): 渲染一个视图文件目录或别名下的视图文件。例如: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, ]); }}小部件中渲染在?小部件?中,可调用以下小部件方法来渲染视图: Within?widgets, you may call the following widget methods to render views.yii\base\Widget::render(): 渲染一个?视图名.yii\base\Widget::renderFile(): 渲染一个视图文件目录或别名下的视图文件。例如:namespace app\components;use yii\base\Widget;use yii\helpers\Html;class ListWidget extends Widget{ public $items = []; public function run() { // 渲染一个名为 "list" 的视图 return $this->render('list', [ 'items' => $this->items, ]); }}视图中渲染可以在视图中渲染另一个视图,可以调用yii\base\View视图组件提供的以下方法:yii\base\View::render(): 渲染一个?视图名.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');视图名渲染视图时,可指定一个视图名或视图文件路径/别名,大多数情况下使用前者因为前者简洁灵活, 我们称用名字的视图为?视图名.视图名可以依据以下规则到对应的视图文件路径:视图名可省

[1] [2] [3] [4]  下一页


视图(Views)