У меня есть пользовательская форма CreateAdminForm
, где администратор в бэкэнд может создать нового пользователя Admin. Я создал свою собственную модель формы, чтобы я мог обрабатывать passsword. Они просто заполняют имя пользователя, имя пользователя, адрес электронной почты, пароль, выбирают статус (активный, запрещенный, удаленный) и выбирают роль (Root, Super, Admin). Они вводят пароль как обычно, и пользовательская форма шифрует его. - У меня есть проверки, так что Root может создать что-либо, Super может создавать только обычных админов, а обычные админы вообще не могут создавать никаких других администраторов.Yii2 - Как передать 'isNewRecord' в пользовательскую форму?
Я на самом деле было это работает на моем последнем проекте, но я обошел isNewRecord
, потому что я создал формы в своих просмотра файлов (create.php и update.php) вместо того, чтобы их обоих, используя один и тот же файл _form.php
. Это не очень важно, но я хотел бы следить за тем, как Yii что-то делает, и получить файл _form.php
, обрабатывающий формы, если это возможно.
Так как я сейчас, используя свою собственную модель CreateAdminForm
вместо Admin
модели (которая представляет собой ответвление User
), он не имеет доступа к isNewRecord
.
Как я могу получить _form.php
для использования isNewRecord
с моей собственной моделью CreateAdminForm
?
Усеченный CreateAdminForm:
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;
}
}
_form.php:
<div class="admin-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'nicename')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'email')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'role')->dropDownList(
$model->getUserRoleDropdown(),
['prompt'=>' - Admin Role - ']
) ?>
<?= $form->field($model, 'status')->dropDownList(
$model->getUserStatusDropdown(),
['prompt'=>' - Admin Status - ']
) ?>
<?= (!$model->isNewRecord) ? Html::a('Change Password!', ['admin/change-admin-password', 'id' => $model->id]) . '<br /><br />' : '' ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Никогда не использовал Yii2, но не мог ли вы просто расширить свою модель администратора вместо создания чего-то, основанного на этом классе модели? – georaldc
Моя форма основана на уже существующих ContactForm и RegistrationForm. Просто изменен, чтобы соответствовать моим потребностям. Возможно, ваше предложение возможно. Я всегда мог захватить действие, чтобы определить, является ли это действием создания или обновления, но это взлом. Поскольку действия по умолчанию для создания/обновления изначально использовались '$ model = Admin', это правдоподобное решение.Я работаю над несколькими другими областями приложения, пока я жду еще нескольких ответов, чтобы войти. Немного, я могу изучить этот маршрут, если у меня нет твердого ответа здесь. Спасибо. –
Ты был прав. С моим текущим 'CreateAdminForm' точно так же, как и я, я просто изменил его на расширение' Model', чтобы расширить 'Admin'. Он работает как шарм, и работает 'isNewRecord'. - Я дам вам немного времени, чтобы написать это как ответ. –