我如何使用ActiveForm满足这些要求?
使用ajax提交表单.
在使用ajax提交之前:检查是否有错误退出.
提交后:如果服务器响应不成功保存结果,则在字段输入下显示字段错误.
我已经创建了新的Yii2基础项目并希望深入挖掘.
登录页面上有一个用户名字段:
我想将标签'Username'更改为自定义标签,例如'My superb label'.我已阅读手册:http: //www.yiiframework.com/doc-2.0/yii-widgets-activefield.html
稍微调查一下后,我得到了下一个结果:
我只更改了模板并更改了布局:
<?= $form->field($model, 'username', [
"template" => "<label> My superb label </label>\n{input}\n{hint}\n{error}"
])?>
Run Code Online (Sandbox Code Playgroud)
如何以正确的方式更改标签的文本?什么是最佳做法?
目前同时实现ajax提交和验证.我正在使用自定义功能:
$('.edit_form').submit(function (e) {
e.preventDefault();
var form = $(this);
var formData = $(this).serialize();
if (form.find('.has-error').length) {
return false;
}
$.ajax({
url: form.attr("action"),
type: form.attr("method"),
data: formData,
success: function (data) {
...
},
error: function () {
alert("Something went wrong");
}
});
});
Run Code Online (Sandbox Code Playgroud)
这里是php端,为了验证我的配置看起来像这样:
$form = ActiveForm::begin([
'id' => "some_form",
'action' => ['user/edit'],
'options' => ['class' => 'edit_form'],
'enableAjaxValidation' => false,
'enableClientValidation' => true,
]); ?>
Run Code Online (Sandbox Code Playgroud)
我敢肯定,这不是达到我需要的最佳方式.特别是我用于在验证错误的情况下阻止提交的这部分:
if (form.find('.has-error').length) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?如何使用Yii 2的内置设置正确实现ajax提交和验证?
这是我网站视图页面中的表单.
<?= $form->field($model, 'taskID')->textInput(['readonly' => true, 'value' => Yii::$app->getRequest()->getQueryParam('id')]) ?>
<?php
$ifDistributor = User::find()->select('userType')->where(['username'=>Yii::$app->user->identity->username])->andWhere(['userType'=>'Distributer'])->exists();
$ifDistributorHasOnSiteSupport = Distributorinfo::find()->select('hasOnSiteSupport')->where(['UName'=>Yii::$app->user->identity->username])->andWhere(['hasOnSiteSupport'=>1])->exists();
if($ifDistributor)
if($ifDistributorHasOnSiteSupport)
echo $form->field($model, 'assignedToID')->dropDownList(
ArrayHelper::map(dektrium\user\models\User::find()
->select('username')
->where(['userType'=>'CCE-Distributer'])
->andWhere(['distributerID'=>Yii::$app->user->getId()])
->all(),'username','username'),['prompt'=>'Select Person']
);
else {
Yii::$app->session->setFlash('error',
"Invalid Page");
//I WANT TO REDIRECT TO index.php?r=tasks/index THIS URL
}
?>
<?= $form->field($model, 'remarks') ?>
<?= $form->field($model, 'scheduledTime')->widget(DateTimePicker::classname(), [
'options' => ['placeholder' => 'Enter event time ...'],
'pluginOptions' => [
'autoclose' => true
]
]) ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
Run Code Online (Sandbox Code Playgroud)
如上面的else部分所示,我想重定向到 …
我使用yii2创建了一个ActiveForm,如下所示:
<?=$form->field($item, 'finalPrice', [
'options' => [
'tag' => 'div',
'class' => '',
],
'template' => '<span class="col-md-2 col-lg-2"><label class="control-label">Final item price</label>{input}{error}</span>'
])->textInput([
// ** i want numeric value **
])->label(false)?>
Run Code Online (Sandbox Code Playgroud)
它产生了以下结果:
<span class="col-md-2 col-lg-2"><label class="control-label">Final item price</label><input type="text" id="item-finalprice" class="form-control" name="Item[finalPrice]"><p class="help-block help-block-error"></p></span>
Run Code Online (Sandbox Code Playgroud)
现在我想让它<input type ="number"..而不是文本..(因此用户可以使用浏览器向上/向下按钮更改值).有什么办法吗?
我正在使用Yii2框架,我想生成这样的HTML代码
<input type="checkbox" id="queue-order" name="Queue[order]" value="1" checked>
Run Code Online (Sandbox Code Playgroud)
在使用ActiveForm的视图中.
我试过了
echo $form->field($model, 'order')
->checkBox(['label' => ..., 'uncheck' => null, 'checked' => true]);
Run Code Online (Sandbox Code Playgroud)
以及
echo $form->field($model, 'order')
->checkBox(['label' => ..., 'uncheck' => null, 'checked' => 'checked']);
Run Code Online (Sandbox Code Playgroud)
但是生成的html代码中没有出现所需的字符串"checked".
奇怪的是,如果我用"选中"代替"选中"
echo $form->field($model, 'order')
->checkBox(['label' => ..., 'uncheck' => null, 'selected' => true]);
Run Code Online (Sandbox Code Playgroud)
然后生成的html代码包含属性"selected":
<input type="checkbox" id="queue-order" name="Queue[order]" value="1" selected>
Run Code Online (Sandbox Code Playgroud)
那么,如何为具有"已检查"属性的复选框生成html代码?
我希望在我的表单中预先选择单选按钮.
<?= $form->field($model, 'config')->radioList(['1'=>'Automatic Entry',2=>'Manual Entry'])
->label('Barcode/Book No Generation'); ?>
Run Code Online (Sandbox Code Playgroud) 我想将表单数据从我的视图发送到控制器,以将数据插入数据库.我已经创建了模型和控制器,但是当我将表单发送到带有操作的控制器时.它只刷新了数据未传递给控制器的页面,只会加载索引页面.这是我的表格:
<div class="container">
<!--<div style="text-align:right;" class="row">
<h3>????? ????? ????</h3>
</div>-->
<div class="row">
<div class="col-md-12" >
<div class="widget-area no-padding blank">
<div class="status-upload">
<!--<form method="POST" action="?r=twit/send-twit">-->
<?php
$form = ActiveForm::begin([
'options' => ['action' => '?r=twit/send-twit']
]);
?>
<?= $form->field($model,'twit')->textarea(); ?>
<!--<textarea name="twitContent" style="text-align:right;" placeholder="...????? ??? ?? ???? ????" ></textarea>-->
<!--<ul>
<li><a title="" data-toggle="tooltip" data-placement="bottom" data-original-title="Audio"><i class="fa fa-music"></i></a></li>
<li><a title="" data-toggle="tooltip" data-placement="bottom" data-original-title="Video"><i class="fa fa-video-camera"></i></a></li>
<li><a title="" data-toggle="tooltip" data-placement="bottom" data-original-title="Sound Record"><i class="fa fa-microphone"></i></a></li>
<li><a title="" data-toggle="tooltip" data-placement="bottom" data-original-title="Picture"><i class="fa fa-picture-o"></i></a></li>
</ul>-->
<!--<button name="submit" …
Run Code Online (Sandbox Code Playgroud) 我正和Yii一起开发一个项目.
我需要在网站的许多页面上使用jquery ui.所以我在网站布局中添加了jquery核心库和jquery ui库,以便在所有页面上访问它们.
但它会在具有表单(活动表单)的页面上引起问题.我在萤火虫上看到这个错误:
jQuery(...).activeform is not a function
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我该如何解决?
谢谢.
似乎样本yii2项目中的复选框模板不能正确应用
<?= $form->field($model, 'rememberMe', [
'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
])->checkbox() ?>
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
active-form ×10
yii2 ×8
php ×5
ajax ×2
html ×2
yii ×2
activerecord ×1
javascript ×1
jquery ×1
view ×1