小部件中的验证表单
Validation Form in wiget
我希望在我的网络应用程序的每个页面上都有一个可用的表单。所以我创建了一个带有表单的小部件。
class AddNewURL extends Widget{
public $model;
public function init()
{
parent::init();
if ($this->model === null) {
$this->model = new ProductUrlForm();
}
}
public function run()
{
return $this->render('addNewURLForm', [
'model' => $this->model,
]);
}
}
和小部件视图
<div class="modal fade bs-example-modal-lg" id="newURL" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<?php Pjax::begin(); ?>
<?php $form = ActiveForm::begin([
'action' => Url::to(['site/new-url']),
'options' => ['data' => ['pjax' => true]],
]) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Add new URL</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<?= $form->field($model, 'url', ['errorOptions' => ['class' => 'help-block', 'encode' => false]])
->textInput(['maxlength' => false])
?>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Add</button>
</div>
<?php ActiveForm::end() ?>
<?php Pjax::end(); ?>
</div>
</div>
</div>
这就是我在 layouts/main.php
中使用此小部件的方式
<?= \app\widgets\AddNewURL::widget() ?>
在我的 site/new-url 操作中我有
public function actionNewUrl()
{
$model = new ProductUrlForm();
$model->status = STATUS_NEW;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
//return success message
}
return $this->render('index', [
'model' => $model,
]);
}
现在当我提交表单数据进入我的操作时,表单被重置,仅此而已。如何使用 pjax 显示验证错误或成功消息?在我的模型中,我几乎没有自定义验证规则。
也许有更好的解决方案,在所有页面上使用一个表单?
动作 actionNewUrl()
必须呈现视图 addNewURLForm
以便 Pjax 可以用从动作接收到的新 html 替换旧形式。
最好将您的小部件、控制器和表单模型放在单独的模块中。
我希望在我的网络应用程序的每个页面上都有一个可用的表单。所以我创建了一个带有表单的小部件。
class AddNewURL extends Widget{
public $model;
public function init()
{
parent::init();
if ($this->model === null) {
$this->model = new ProductUrlForm();
}
}
public function run()
{
return $this->render('addNewURLForm', [
'model' => $this->model,
]);
}
}
和小部件视图
<div class="modal fade bs-example-modal-lg" id="newURL" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<?php Pjax::begin(); ?>
<?php $form = ActiveForm::begin([
'action' => Url::to(['site/new-url']),
'options' => ['data' => ['pjax' => true]],
]) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Add new URL</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<?= $form->field($model, 'url', ['errorOptions' => ['class' => 'help-block', 'encode' => false]])
->textInput(['maxlength' => false])
?>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Add</button>
</div>
<?php ActiveForm::end() ?>
<?php Pjax::end(); ?>
</div>
</div>
</div>
这就是我在 layouts/main.php
中使用此小部件的方式<?= \app\widgets\AddNewURL::widget() ?>
在我的 site/new-url 操作中我有
public function actionNewUrl()
{
$model = new ProductUrlForm();
$model->status = STATUS_NEW;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
//return success message
}
return $this->render('index', [
'model' => $model,
]);
}
现在当我提交表单数据进入我的操作时,表单被重置,仅此而已。如何使用 pjax 显示验证错误或成功消息?在我的模型中,我几乎没有自定义验证规则。
也许有更好的解决方案,在所有页面上使用一个表单?
动作 actionNewUrl()
必须呈现视图 addNewURLForm
以便 Pjax 可以用从动作接收到的新 html 替换旧形式。
最好将您的小部件、控制器和表单模型放在单独的模块中。