渲染 Ajax 视图
Controller::renderAjax()
方法可用于响应 Ajax 请求。此方法类似于 renderPartial()
,除了它将使用 JS / CSS 脚本和在视图中注册的文件注入到呈现结果中
假设我们在视图文件中有登录表单:
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
\yii\bootstrap\BootstrapAsset::register($this);
<div class="site-login">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username')->textInput() ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= Html::submitButton('Login',['class' => 'btn btn-primary btn-block']) ?>
<?php ActiveForm::end(); ?>
</div>
当我们在控制器动作中使用 renderPartial()
时:
public function actionLogin()
{
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
}
return $this->renderPartial('login', [
'model' => $model,
]);
}
动作输出:
<div class="site-login">
<form id="w0" action="/site/login" method="post" role="form">
<div class="form-group field-loginform-username required">
<label class="control-label" for="loginform-username">Имя пользователя</label>
<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
</div>
<div class="form-group field-loginform-password required">
<label class="control-label" for="loginform-password">Пароль</label>
<input type="password" id="loginform-password" class="form-control" name="LoginForm[password]">
</div>
<button type="submit" class="btn btn-primary btn-block">Login</button>
</form>
</div>
当我们在控制器动作中使用 renderAjax()
时:
...
return $this->renderAjax('login', [
'model' => $model,
]);
...
动作输出(JS,注入 CSS):
<link href="/assets/f1759119/css/bootstrap.css" rel="stylesheet">
<div class="site-login">
<form id="w0" action="/site/login" method="post" role="form">
<div class="form-group field-loginform-username required">
<label class="control-label" for="loginform-username">Имя пользователя</label>
<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
</div>
<div class="form-group field-loginform-password required">
<label class="control-label" for="loginform-password">Пароль</label>
<input type="password" id="loginform-password" class="form-control" name="LoginForm[password]">
</div>
<button type="submit" class="btn btn-primary btn-block">Login</button>
</form>
</div>
<script src="/assets/13aa7b5d/jquery.js"></script>
<script src="/assets/302a2946/yii.js"></script>
<script src="/assets/302a2946/yii.validation.js"></script>
<script src="/assets/302a2946/yii.activeForm.js"></script>
如果我们想从视图中排除某些资产(以防止出现共识):
...
Yii::$app->assetManager->bundles = [
'yii\bootstrap\BootstrapAsset' => false,
];
return $this->renderAjax('login', [
'model' => $model,
]);
...
动作输出(没有 bootstrap.css):
<div class="site-login">
<form id="w0" action="/site/login" method="post" role="form">
<div class="form-group field-loginform-username required">
<label class="control-label" for="loginform-username">Имя пользователя</label>
<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
</div>
<div class="form-group field-loginform-password required">
<label class="control-label" for="loginform-password">Пароль</label>
<input type="password" id="loginform-password" class="form-control" name="LoginForm[password]">
</div>
<button type="submit" class="btn btn-primary btn-block">Login</button>
</form>
</div>
<script src="/assets/13aa7b5d/jquery.js"></script>
<script src="/assets/302a2946/yii.js"></script>
<script src="/assets/302a2946/yii.validation.js"></script>
<script src="/assets/302a2946/yii.activeForm.js"></script>