有没有什么办法来提示通过ActiveForm
分配的属性标签进行验证?
比如我有一个模型属性amount
,并在其attributeLabels
函数中定义的标签是“金额”
但同时产生I型neeed标签“费用”,所以:
$form->field($model, 'amount')->textInput(['maxlength' => true])->label('Fees')
验证之后,它提示我“金额不能为空” - 我知道我们可以编写一条规则来改变信息,但根据我的要求,相同的属性(来自同一模型)在不同的表单上有不同的标签。
我知道,后端实现默认消息的用途:
'message' => '{attribute} cannot be blank.'
没有人知道是否有任何{x}
通过在的ActiveForm分配的标签可以被检索到的?
PS:我知道这个问题可以通过场景来解决。但是对于每一个有双重标签的领域,都要写规则是很繁琐的。来自通过ActiveForm分配的标签的Yii2模型验证消息
回答
有没有这样的方式,对不起!你正在做的是覆盖视图内的标签。其实在形式上更精确。如果查看label()
-方法does,则会看到它从Html-helper中调用activeLabel()
。该方法依次呈现您的标签并返回代码。
正如您所看到的,这些信息都不会写回模型。因此,在验证过程中,您不会有新的标签,因为它永远不会进入模型。
你最干净的选择是你已经提到的选项。使用场景来决定使用哪个验证规则(以及消息)。或者你可以创建你写你的临时标签,像这样自己的公共财产:
class MyModel extends \yii\db\ActiveRecord
{
public $myTempLabel;
public function attributeLabels()
{
$myLabel = $this->myTempLabel === null ? Yii::t('app', 'defaultLabel') : $this->myTempLabel;
return [
//other labels...
'myField'=>$myLabel,
//other labels...
];
}
}
在你看来,你可以将该值设置回你的模型中的属性。
对不起,不能帮助更好,但这是它的实施方式!
哇,这是一个很好的解释(Y)我通常经历核心实现,但我不知道我是如何忘记这次。谢谢你,让我更容易理解:) –
您需要做的是处理attributeLabels()函数中的标签更改逻辑。
class MyModel extends \yii\base\Model {
public $amount_label = 'amount';
public function attributeLabels() {
return [
'amount' => $this->amount_label
];
}
}
然后在你的控制器中。
$model = new MyModel;
$model->amount_label = 'fees';
...
当然,您可能希望以不同的方式设置标签。例如,如果您的模型是一个类型属性,并且这是确定标签的属性,则可以根据该类型属性执行条件。
只是一个更正:尝试记住异常:)如果有人没有设置'$ model-> amount_label'和该属性被ActiveForm使用会怎么样?很明显,应用程序会崩溃。你可以这样做:''amount'=>空($ this-> amount_label)?'default_label':$ this-> amount_label' –
- 1. 通过ActiveForm创建多个模型Yii2
- 2. 如何通过模型标签和错误消息传递外部验证?
- 3. 来自模型级验证的用户友好的消息
- 4. 为验证消息分配标识
- 5. 显示来自rails模型的验证错误消息
- 6. yii2验证表单元素的模型,而无需使用的ActiveForm
- 7. 消息独特的验证不yii2
- 8. 在yii2模型中自定义验证
- 9. 来自程序的Bean验证消息
- 10. Yii2从的ActiveForm
- 11. rails验证:未通过时的消息?
- 12. Yii2 - 通过IP验证AccessControl
- 13. 与M2Crypto验证签名消息的自签名证书
- 14. Xtext UI模型验证和通过标记进行消息传递
- 15. 来自实体配置的MVC 4验证消息
- 16. Yii2验证消息不会改变
- 17. Yii2 - 如何的ActiveForm
- 18. 通过更改验证消息的顺序来停止Html.ValidationSummary()
- 19. Rails3:显示来自模型的消息?
- 20. yii2验证相关的模型
- 21. 验证消息来自哪里?
- 22. 如何通过发送验证消息来验证用户的手机号码?
- 23. Authlogic中会话模型的自定义验证消息
- 24. 根据模型验证自定义设计的Flash消息
- 25. MVC 2模型验证消息
- 26. Yii2使用Html标签的Active Form自定义消息
- 27. Yii2 - 阿贾克斯的ActiveForm验证不显示错误
- 28. 禁用提交按钮以外的ActiveForm客户端验证Yii2
- 29. 验证Yii2 Activeform的简单按钮点击
- 30. 验证伊朗码梅利在阿贾克斯的ActiveForm Yii2
嘿伙计!如果两个答案中的一个帮助你,你应该将其标记为......以供其他用户找到:)!标记为 – PLM57
。感谢提醒:) –