Вообщем такое дело, решил потренироваться в traits и заодно избавится от одного расширения для сохранения картинок и в итоге написал такой код:
trait UploadFilesTrait {
public function upload($model_name, $field, $path_to_file = 'undefined', $oldFile = '') {
if ($model_name->validate()) {
$name_image = $model_name->$field->baseName . '.' . $model_name->$field->extension;
$new_name_image = 'upload/temp_files/' . time() . '.' . $model_name->$field->extension;
$path = 'upload/' . $path_to_file . '/' . $name_image;
shell_exec('convert ' . $new_name_image . ' -auto-orient -quality 90 ' . $path);
$model_name->$field->saveAs($path);
@unlink($new_name_image);
if ($oldFile != '') {
@unlink($oldFile);
}
return true;
} else {
return false;
}
}
public function uploadGallery($model_name, $field, $path_to_file = 'undefined') {
if ($model_name->validate()) {
foreach ($model_name->$field as $file) {
$randTempNameFile = time() . '_' . $file->baseName;
$name_image = $file->baseName . '.' . $file->extension;
$new_name_image = 'upload/temp_files/' . $randTempNameFile . '.' . $file->extension;
$path = 'upload/' . $path_to_file . '/' . $name_image;
shell_exec('convert ' . $new_name_image . ' -auto-orient -quality 90 ' . $path);
$file->saveAs($path);
@unlink($new_name_image);
}
return true;
} else {
return false;
}
}
}
Использую его в контроллере так:
$newTicketText = new TicketsText();
if ($newTicketText->load(Yii::$app->request->post())) {
$newTicketText->ticketsFiles = UploadedFile::getInstances($newTicketText, 'ticketsFiles');
if ($newTicketText->ticketsFiles) {
$this->uploadGallery($newTicketText, 'ticketsFiles','tickets');
}
$newTicketText->date_time = date('Y-m-d H:i:s');
$newTicketText->user_type = TicketsText::TYPE_USER_NORMAL;
$newTicketText->save(false);
$newTextFiles = new TicketsFiles();
foreach ($newTicketText->ticketsFiles as $ticketFile) {
$newTextFiles->ticket_id = $newTicketText->ticket_id;
$newTextFiles->ticket_text_id = $newTicketText->id;
$newTextFiles->file = 'upload/tickets/' . $ticketFile;
$newTextFiles->save(false);
}
return $this->refresh();
}
Суть проблемы в том, что при попытке сохранение 2 или 3 картинок, сохраняется только одна последняя, при этом она есть только в базе физически она не сохраняется. Поэтому прошу помощи. Ну и часть кода где я цепляю картинки:
<div class="attach">
<div class="attach__wrapp-label">
<label class="attach__label" id="label-file1" for="file1">
<?= Html::activeFileInput($newTicketText, 'ticketsFiles[]', ['multiple' => true, 'class' => 'left clip-input1 attach__input', 'id' => 'file1']); ?>
<span class="attach__icon s-di-vertical-m"></span>
<span class="attach__text s-di-vertical-m clip-input-txt1">Прикрепить файл</span>
</label>
<?= Html::error($newTicketText, 'ticketsFiles[]', ['class' => 'help-block']); ?>
</div>
</div>
Создавайте модель($newTextFiles = new TicketsFiles();) внутри цикла, то есть просто передвинте эту строчку на одну строчку вниз.
Ну вообще после нескольких десяток попыток я нашел в чем проблема и она не только в том, что я модель создавал вне цикла. Вообщем вот код:
if ($newTicket->load(Yii::$app->request->post())) {
$newTicket->status = Tickets::STATUS_OPEN_TICKET;
$newTicket->new_text = false;
$newTicket->ticketFiles = UploadedFile::getInstances($newTicket, 'ticketFiles');
$newTicket->save(false);
$newTextTicket = new TicketsText();
$newTextTicket->ticket_id = $newTicket->id;
$date_time = new DateTime('now', new DateTimeZone("UTC"));
$newTextTicket->date_time = $date_time->format('Y-m-d H:i:s');
$newTextTicket->text = $newTicket->tickets_text;
$newTextTicket->user_type = TicketsText::TYPE_USER_NORMAL;
$newTextTicket->save(false);
if ($newTicket->ticketFiles) {
$manyFile = $this->uploadGallery($newTicket, 'ticketFiles','tickets');
foreach ($manyFile as $ticketFile) {
$newTextFiles = new TicketsFiles();
$newTextFiles->ticket_id = $newTicket->id;
$newTextFiles->ticket_text_id = $newTextTicket->id;
$newTextFiles->type_file = $ticketFile['type'];
$newTextFiles->file = $ticketFile['path'];
$newTextFiles->name_file = $ticketFile['name'];
$newTextFiles->save(false);
}
}
return $this->refresh();
}
Правда тут еще данные добавились, но суть ясна.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
html_entity_decode возвращает строку в p, а мне нужно чтобы она не была обернута в тэг pКак можно это сделать? Потому как хочу на этот
Рекурсивная функция возвращает все папки из директории C:\Test, кроме вложенныхЧто необходимо изменить, чтобы генератор yield возвращал все папки,...
хотел бы узнать почему не работает форма на сайте, есть сайт http://vialusocom/product/wordpress-pennant При клике на купить в 1 клик вылезает модальное окно, хотел...
По какой то причине nginx отвечает на запросы OPTIONS кодом 405 и стандартной страницей ошибки nginxКак заставить nginx передать запрос в php?