У меня вопрос о добавлении некоторых данных за пределы формы и отправке их с данными формы. Смотреть! У меня есть 3 поля ActiveForm:
имя (текст) электронная почта (электронная почта) конечно (скрыто)
Хорошо, но мне нужно добавить еще один под названием «статус». Я не хочу добавлять скрытые поля, просто хочу добавить внутренний контроллер или модель.
Как?
Контроллер:
public function actionFree()
{
$model = new SubscribeForm();
$this->view->title = "ШКОЛА ПИСАТЕЛЬСКОГО МАСТЕРСТВА: Новичок курс";
if ($post = $model->load(Yii::$app->request->post())) {
if ($model->save()) {
Yii::$app->session->setFlash('success', 'Данные приняты');
return $this->refresh();
}
else {
Yii::$app->session->setFlash('error', 'Ошибка');
}
}
else {
// страница отображается первый раз
return $this->render('free-course', ['model' => $model, 'course_id' => 1]);
}
}
Модель:
class SubscribeForm extends ActiveRecord
{
public $fio;
public $email;
public $course;
public $status;
public static function tableName()
{
return 'users';
}
public function rules()
{
return [
// username and password are both required
[['fio', 'email'], 'required'],
[['email'], 'unique'],
['email', 'email'],
['email', 'safe']
];
}
}





Вы можете просто установить значение в своем контроллере, например:
public function actionFree()
{
$model = new SubscribeForm();
$model->status = 'your-status-value';
// ... the rest of your code
Или вы можете добавить в свою модель значение по умолчанию. Таким образом, вы по-прежнему можете отменить значение из контроллера или поля формы, но получите это значение, когда больше ничего не предоставлено.
public function rules()
{
return [
['status', 'default', 'value' => 'your-default-status-value'],
// .. other rules
];
}
Спасибо, но у меня ошибка. Я использовал второй метод для переменной по умолчанию, но хочу отправить $ course. Посмотрите: Внутри контроллера: $ model = new SubscribeForm (); $ model-> course = 1; // ... А внутри модели: public $ course = 0; public function rules () {return [// ... ['курс', 'по умолчанию', 'значение' => $ this-> course],]; } Выполняемый SQL: INSERT INTO users (fio, email, status) VALUES ('ASDASDA.', '[email protected]', 1). Ничего о конечно, почему?
Вы уверены, что столбец course существует в вашей таблице? В противном случае он точно не будет отображаться в SQL. Кроме того, нет смысла создавать переменные для ваших столбцов. Это то, что ActiveRecord уже делает для вас в фоновом режиме. Значит, вам не нужны переменные public. И правило для стоимости курса также не имеет смысла, потому что вы устанавливаете его на значение, которое оно уже имеет.
У меня есть столбец "курс" в пользователях. Стоимость курса я не хочу отправлять из формы. Я хочу поставить его обратно. Но у меня такая ошибка. SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (***.users, ОГРАНИЧЕНИЕ users_ibfk_2 FOREIGN KEY (course) ССЫЛКИ courses (id) ДЛЯ УДАЛЕНИЯ КАСКАДА ПРИ КАСКАДЕ ОБНОВЛЕНИЯ)
Похоже, значение, которое вы пытаетесь сохранить в столбце курса, еще не существует в таблице курсов. Если вы хотите сохранить значение 1 в столбце курса, сначала должна существовать запись в таблице курсов с идентификатором 1.
Хорошо, давайте попробуем без индексов ... Слушайте, у меня есть правила: public $status, $course; [['fio', 'email'], 'required'], ['email', 'email'], [['status', 'course'], 'safe'], И внутри контроллера: $model = new SubscribeForm(); $model->course = '2'; $model->status = '3'; if ($model->load(Yii::$app->request->post())) { if ($model->save()) { В db: FIO и EMAIL - значения, а статус и конечно - нет. Почему? статус и курс - INT
Выполнено! Удаляю переменную на модели: D
вы уже пометили поле с именем status в вашей модели .. так что просто используйте его ..
$model->status = 'your_status';