我们的系统目前有主题可以由系统生成并遵循相同的文件夹/文件结构。
这些主题都看同一个模型,不幸的是它已经到了不同主题需要不同的必需字段的地步,这些字段将永远不会在其他主题中使用。
我已经查看了方案,但我认为它们不是正确的解决方案,是不是像在视图中将字段设置为所需的解决方案一样简单?
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('username,forename,surname, type_id', 'required'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('prefix, forename, surname, email, telephone, address_id, type_id, company, company_role, bio, dob, create_time, update_time, plusGuest', 'safe', 'on' => 'search'),
);
}
例如我们将用户名标记为必需...但在另一个主题中我们没有在表单中使用用户名,现在我们可以隐藏它并在表单上给它一个默认值但是我感觉不到这是最好的解决方案。也许是这样,我正在推翻事情!
基本上,无论如何都要根据不同的主题分配不同的规则(请记住,我们可能有数百个这样的规则,它们需要动态生成或至少在我们的最后快速更改)。我见过的其他解决方案似乎都是基于了解所有参数以及事先需要的规则。
答案 0 :(得分:0)
我只是大声思考而且这个在我的上下文中没有经过测试,但是你可以在规则函数中设置一个if并在模型中设置一个属性,它将成为你将确定的标志正在使用什么布局。不同的布局值不同的规则集。我在模型的搜索功能中使用了这种方法,当时它对我有用。它只有两个选项,所以它不大或复杂。这并不理想,事实上它是hacky而不是Yii解决方案,但如果你是绝望和冒险尝试它。