yii2-advanced, сохраняю картинки.
На диск, в нужный каталог и под нужным именем копируются нормально, но в базу не сохраняются. Почему так? Контроллер:
public function actionCreate(){
$model = new Products();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
if ($model->create()) {
if ($model->save()){
$model->loadImages();
}
}
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('create', [
'model' => $model,
]);
}
Метод для загрузки:
public function loadImages(){
$this->image = UploadedFile::getInstances($this, 'image');
if ($this->image && $this->validate()){
$dir = "uploads/products/$this->name";
if(!file_exists($dir)){
mkdir($dir);
chmod($dir, 1777);
}
foreach ($this->image as $i => $images){
$model = new Images();
$model->name = "$dir/$i.$images->extension";
$model->save();
$model->num = $i;
$model->users_id = Yii::$app->user->id;
$model->products_id = $model->id;
$images->saveAs($model->name);
}
}
}
Представление (ничего особенного, только поля формы):
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'price')->textInput() ?>
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
<?= $form->field($model, 'bar_code')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'vendor_code')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'count')->textInput() ?>
<?= $form->field($model, 'image[]')->fileInput(['multiple' => true]) ?>
<?= $form->field($model, 'fabricators_id')->dropDownList(Fabricators::getParam('name')) ?>
Замени на: $model->name = "$dir/$i.".$images->extension;
в базе ещё тип данных на поле name - надо text поставить
$model = new Images();
$model->name = "$dir/$i.$images->extension";
$model->save();
$model->num = $i;
$model->users_id = Yii::$app->user->id;
$model->products_id = $model->id;
$images->saveAs($model->name);
А это нормально не проверять сохранилась ли модель, и сохранять ее перед тем, как запишешь в нее все?
Всегда проверяйте перед сохранением
if($model->save(){}
else{// отлов ошибок}
Нашел ошибку: проблема была в моей невнимательности.
$model->products_id = $model->id;
должно было быть
$model->products_id = $this->id
Поля у модели картинок - required, а т.к. products_id получал пустое значение (модель не сохранена, в базе автоинкрементация), то и сохранять картинки она не собиралась.
Помогло использование var_dump
Вот так выглядит рабочий код (может кому-нибудь будет интересно...):
public function loadImages(){
$this->image = UploadedFile::getInstances($this, 'image');
if ($this->image && $this->validate()){
$dir = "uploads/products/$this->name";
foreach ($this->image as $i => $images){
$model = new Images();
$model->name = "$dir/$i.$images->extension";
$model->num = $i;
$model->users_id = Yii::$app->user->id;
$model->products_id = $this->id;
if($model->save()){
if(!file_exists($dir)){
mkdir($dir);
chmod($dir, 1777);
}
$images->saveAs($model->name);
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, в функцию попадает число, с ним внутри происходят математические операции, есть ли способ из числа 0100 получить 100 не прибегая...
Не работает часть сайта из за php кода на хостинге 000webhostcom