我想在我的Web应用程序的每个页面上都有一个可用的表单。所以我用表格创建了一个小部件。
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显示验证错误或成功消息?在我的模型中,我没有几个自定义验证规则。
也许有更好的解决方案在所有页面上使用一种表单?
答案 0 :(得分:1)
动作actionNewUrl()
必须呈现视图addNewURLForm
,以便Pjax可以用从动作中接收的新html替换旧表单。
最好将小部件,控制器和表单模型放置在单独的模块中。