我有一个自定义表单CreateAdminForm
,后端的管理员可以创建一个新的管理员用户。我创建了自己的表单模型,因此我可以处理密码。他们只需填写用户名,nicename,电子邮件,密码,选择状态(活动,禁止,删除),然后选择一个角色(Root,Super,Admin)。他们正常输入密码,自定义表单对其进行加密。 - 我有检查,所以Root可以创建任何东西,Super只能创建常规管理员,而普通管理员根本无法创建任何其他管理员。
我实际上已经在我的上一个项目上工作了,但我绕过了isNewRecord
,因为我在各自的视图文件(create.php和update.php)中创建了表单,而不是使用相同的{{1}。 1}}文件。这不是什么大不了的事,但我想按照Yii的方式做事,并在可能的情况下再次处理_form.php
文件处理表格。
由于我现在使用自己的模型_form.php
而不是CreateAdminForm
模型(这是Admin
的衍生品),因此它无法访问User
。
如何isNewRecord
将_form.php
与我的自定义isNewRecord
模型一起使用?
截断CreateAdminForm:
CreateAdminForm
_form.php:
class CreateAdminForm extends Model
{
public $nicename;
public $username;
public $email;
public $password;
public $role;
public $status;
public function createAdmin()
{
if ($this->validate()) {
$admin = new Admin();
$admin->nicename = $this->nicename;
$admin->username = $this->username;
$admin->email = $this->email;
$admin->role = $this->role;
$admin->status = $this->status;
$admin->setPassword($this->password);
$admin->generateAuthKey();
if ($admin->save()) {
return $admin;
}
}
return null;
}
}
答案 0 :(得分:0)
让CreateAdminForm
课程按照您希望的方式工作的一种方法是让它保存Admin
课程的副本作为属性并使其工作。这样,您就可以创建一个访问Admin isNewRecord
属性的方法。下面的简单例子
class CreateAdminForm extends Model
{
// This needs to be filled in with an instance of Admin. Maybe through your constructor or through dependency injection
protected $admin;
public function createAdmin()
{
if ($this->validate()) {
$this->admin->nicename = $this->nicename;
$this->admin->username = $this->username;
$this->admin->email = $this->email;
.
.
.
return $this->admin->save()
}
return false;
}
public function isNewRecord()
{
return $this->admin->isNewRecord;
}
}
至于另一种更简单的方法(因为这似乎已回答了您的问题),您可以CreateAdminForm
继承Admin
以获取对ActiveRecord
和{{{{{{ 1}}例如BaseActiveRecord
方法(而不必担心管理2个对象)
getIsNewRecord()
答案 1 :(得分:0)
isNewRecord
Model
$isNewRecord
是ActiveRecord
的属性,从BaseActiveRecord
延伸。因此,当您对表单使用Model
时,无法调用此属性。
class MyForm extends Model
{
}
没有使用isNewRecord
,因为Model / Form无法将数据插入数据库。因此,没有数据更新的可能性。