Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Yii2, Массовое присвоение
user_name  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Мне нужно получить данные с формы и записать в БД.
Делаю так, это работает. Но как можно сделать массовое присвоение через ActiveRecord::attributes ?
controller
$blog = new Blog();

if($blog->load(Yii::$app->request->post())) {
$blog->addArticle();
}



model
class Blog extends ActiveRecord

public $form_title;
public $form_content;

public function rules() {
return [
[[
'title', 'content', 'status'], 'safe'],
[[
'form_title', 'form_content'], 'required'],
];

}

public function addArticle() {
// $this->attributes = $attributes;
$this->title = $this->form_title;
$this->content = $this->form_content;
$this->save();
}


view
<?php $form = ActiveForm::begin(['id' => 'my-form']); ?>

<?=
$form->field($blog, 'form_title') ?>
<?=
$form->field($blog, 'form_content')->textarea() ?>
<?=
HTML::button('Сохранить', ['type' => 'submit']) ?>

<?php
ActiveForm::end(); ?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Если только так получать данный с формы.. Но тогда имена полей формы должны соответствовать именам столбцов таблицы Бд. Придется сценарии использовать что бы не было конфликтов. :unsure:
if ($attributes = $_POST["Blog"]) {
$blog->addArticle($attributes);
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




Цитата (user_name @ 16.12.2015 - 22:36)
Но тогда имена полей формы должны соответствовать именам столбцов таблицы Бд.

Так они и должны соответствовать.
У тебя непонятно зачем ты вводишь публичные св-ва $form_title, $form_content, если у тебя и так есть $model->title, $model->content которыми и надо пользоваться


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Michael
А эти свойства $model->title, $model->content автоматически создаются в модели в соответствии с названиями полей таблицы? Ну тогда кажется разобрался..
Получилось вот:

controller
$blog = new Blog();
if ($attributes = $_POST["Blog"]) {
$blog->addArticle($attributes);
}


model
class Blog extends ActiveRecord
public function rules() {
return [
[[
'title', 'content'], 'required'],
];

}
public function addArticle($attributes) {
$this->attributes = $attributes;
$this->save();
}


view
<?= $form->field($blog, 'title') ?>
<?=
$form->field($blog, 'content')->textarea() ?>


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




делается обычно это так:

if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->session->setFlash('form-successful-message', Yii::t('menu', 'The new menu has been created'));
return $this->redirect(['view', 'id' => $model->mid]);
}



Цитата (user_name)
автоматически создаются в модели в соответствии с названиями полей таблицы?

Ну да, это же основы ActiveRecord, если генерировал модель через gii, то и в phpDoc будут прописаны эти св-ва
/**
* This is the model class for table "tbl_menu".
*
* @property integer $mid
* @property string $mname
* @property string $lang
* @property integer $isadmin
*/


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Michael
А если я в этой модели еще вывожу данные с базы, то мне нужно делать отдельные сценарии? Для формы и для бд. Свойства (атрибуты) ведь одинаковые и правила валидации получаются одни.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




Цитата (user_name @ 17.12.2015 - 13:13)
Michael
А если я в этой модели еще вывожу данные с базы

в смысле, что значит выводишь и куда?


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Michael
Да фигню я спросил, запутался уже. Вот до сохранения я загружаю данные с формы в модель $model->load(Yii::$app->request->post() и прохожу валидацию в rules потом при сохранении $model->save() я опять ту же самую валидацию прохожу, зачем? В док. написано что при save валидация автоматически вызывается huh.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Может потому что в первый раз через аякс идет проверка а это js
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




в том примере что я указал, там 1 раз валидация делается в save()

, а ты что еще validate() где то сам прописываешь еще?


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Michael
validate() я нигде не прописываю. А как тогда срабатывает валидация полей формы. Она же без перезагрузки страницы работает . Даже если save() вообще убрать. Данные загружаеются в модель и валидируются. Например если поле пустое мне об этом скажут т.е. все работает по правилам в rules()
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




ну так то Yii подключает js валидацию для этих полей( для дефолтных валидаторов). Можно отключить:
<?php $form = ActiveForm::begin(['enableClientValidation' => false]) ?>

увидишь, что валидировать будет только после перезагрузки.


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Michael
Я js отключал проверял, теперь все понятно)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
user_name  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 117
Пользователь №: 40434
На форуме: 2 года, 9 месяцев, 2 дня
Карма:




Добрый день!! Не могу понять почему $request->post() возвращает мне такой массив:
Array ( [_csrf] => TmEuV1ZRZlV/OG8AEzNLHBYFZBAdZlQYFlRNPi8bEiccL0YZGigwbA== [Users] => Array ( [username] => asd [password] => 123123 [email] => asd@asd) )

public function actionReg() {
$model = new Users();
print_r(Yii::$app->request->post());
if ($model->load(Yii::$app->request->post())) {
if ($model->validate()) {
$model->save();
}
}

return $this->render('reg', ['model' => $model]);
}


т.е. $request->post('username') возвратит мне NULL так же как и $_POST['username']. Почему появился еще один массив Users в массиве post запроса? Теперь чтобы получить данные приходится писать $_POST['Users']['username']
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6095
Пользователь №: 18498
На форуме: 7 лет, 11 месяцев, 28 дней
Карма: 256




св-ва модели прячутся под название модели.
У тебя же на одной форме могут быть инпуты от разных моделей, они не должны делить общее пространство имен.
Да и методу load надо знать откуда из поста ему грузануть данные в модель, вон глянь для примера:
https://github.com/yiisoft/yii2/blob/master.../Model.php#L819


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса