В общем ситуация такая. Пытаюсь вновь оформить загрузку нескольких фалов на сервер, и записать их имена в БД.
Но они не проходят валидацию( Подскажите пожалуйста, как сделать это, используя одну модель. Или хотя бы одну форму. Потому как это очень важный момент. Это загрузка изображений от пользователя плюс кое какие данные заказа. Все должно бытьв одной форме. и естественно выгружаться в одну таблицу в БД.
Вот акшон:
Код: Выделить всё
public function actionCommissions()
{
$base_price = CastomPrices::find()->where(['kind' => '0'])->all();
$extra_cost = CastomPrices::find()->where(['kind' => '1'])->all();
$shipping = CastomPrices::find()->where(['kind' => '2'])->all();
$castomorders = CastomOrders::find()->orderBy(['`id`' => SORT_DESC])->limit(5)->asArray()->all();
$model = new CastomOrders();
if ($model->load(Yii::$app->request->post())) {
$model->user_id = Yii::$app->user->getId();
$files = UploadedFile::getInstances($model, 'referens');
$model->referens = $model->uploadRef($files);
$model->save();
}
return $this->render('commissions', compact('model', 'castomorders', 'base_price', 'extra_cost', 'shipping'));
}
Код: Выделить всё
<?php
namespace app\models;
use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
use Yii;
/**
* This is the model class for table "castom_orders".
*
* @property int $id
* @property int $user_id
* @property string $name
* @property string $description
* @property string $referens
* @property int $status
* @property int $progress
* @property string $user_name
* @property string $address
*/
class CastomOrders extends ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'castom_orders';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['description', 'user_name', 'user_email'], 'required'],
[['user_id', 'status', 'price', 'progress'], 'integer'],
[['description'], 'string'],
[['user_email'], 'email'],
[['referens'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 5],
[['user_name', 'track_num'], 'string', 'max' => 255],
[['created_at', 'updated_at'], 'safe'],
];
}
public function behaviors() {
return [
[
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
// если вместо метки времени UNIX используется datetime:
'value' => new Expression('NOW()'),
],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'description' => 'Description',
'referens' => 'Figure reference',
'user_name' => 'Your full name',
'user_email' => 'Your address email'
];
}
public function uploadRef($files)
{
$fileName_arr = array();
foreach ($files as $file) //Прогоняем через форич каждый элемент массива с картинками.
{
$fileName = strtolower(md5(uniqid($file->baseName))) . '.' . $file->extension; //Создаем уникальное имя для картинки
$file->saveAs($this->getFolder() . $fileName); //Сохраняем файл на сервер.
$fileName_arr[] = $fileName; //Добваляем новое имя файла в массив с именами файлов
}
$fileName_str = implode(',', $fileName_arr); //Превращаем массив с именами файлов в стрку.
return $fileName_str; //Возвращаем строку с именами файлов.
}
public function deleteCurentImages($curImages) {
foreach ($curImages as $img)//удаляем существующие картинки
{
if(file_exists($this->getFolder() . $img))//Проверка на существование файлов
{
unlink($this->getFolder() . $img);//Удаляем файлы
}
}
}
private function getFolder()
{
return Yii::getAlias('@web') . 'img/castom_order_ref/';
}
}