Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть код
$request->file('img')->move(public_path('thumb/items'), $request->file('img')->getClientOriginalName());
$data = $request->except(['img']);
$data['img'] = '/thumb/items/' . $request->file('img')->getClientOriginalName();
Повторяется во всех функциях update и store. Можно ли как то вынести в отдельный фасад, или куда то еще, что бы упростить код?
Не в сети
Можно конечно. Есть демка Services/Registrar. Можете сделать аналогично.
Не в сети
Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?
Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?
загруженные изображения нужно переместить в папку приложения, сохранить куда-то их список, потом список передавать в вид и там их отображать.
Не в сети
Николай пишет:Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?
загруженные изображения нужно переместить в папку приложения, сохранить куда-то их список, потом список передавать в вид и там их отображать.
Как лучше хранить этот список? И как в целом варианты хранения есть?
-----------------------
У себя использую такую форму
<div class="form-group">
{!! Form::label('image', 'Image:')!!}
{!! Form::file('img',['class' => 'form-control'])!!}
</div>
и такой контроллер
$request->file('img')->move(public_path('thumb'), $request->file('img')->getClientOriginalName());
$data = $request->except(['img']);
$data['img'] = '/thumb/' . $request->file('img')->getClientOriginalName();
$category->update($data);
Но как лучше сделать, когда надо хранить несколько разных размеров изображения?
Не в сети
- Но как лучше сделать, когда надо хранить несколько разных размеров изображения?
либо ресайзить сразу и формировать имена изображений в определённом формате — тогда можно хранить только одно имя (удобно если используются @2x-изображения для ретины), либо ресайзить на лету и кэшировать отресайзенное — тут с ларой лучше сразу браться за Glide.
Не в сети
Скажите пожалуйста, для чего эта строчка <code>$data = $request->except(['img']);</code>?
Она означает, что в массив $data мы передаем все поля из $request, кроме поля img, т.к. далее идет его переопределение и добавление в $data переопределенного значения img
Не в сети
Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).
Не в сети
Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).
Кирилл, я правильно понял, ты и есть автор этого пакета?
Я решил эту проблему достаточно просто. Когда пользователь загружает изображение, то мой функционал его получает от пользователя, сохраняет на диск, потом получает из диска и перекодирует в текстовый формат Base64 и отдает его в виде превьюшки назад пользователю. А оригинальное изображение удаляет с диска. Вот и все. Если пользователь не засабмитит форму, то ничего страшного не произойдет. А если засабмитит, то изображение опять загрузится на диск.
когда я прочитал этот пассаж, я слегка охренел. в 2017м году FileReader есть как бы не во всех браузерах в принципе, грузить файл на сервер только чтобы получить его base64 совершенно не нужно – браузер умеет делать это совершенно самостоятельно:
<script>
$(function() {
$('#some-image-input').on('change', function () {
var file = this.files[0]
if (file != null && file.type.match('image.*')) {
var reader = new FileReader()
reader.onload = function (e) {
$('#some-image-placeholder').empty().append(
$('<img>').attr('src', e.target.result).css('max-width', '100%')
)
}
reader.readAsDataURL(file)
}
})
})
</script>
на сервер после этого загружается уже файл с формой как обычно. превью появляется сразу как файл выбран в инпуте
Не в сети
kirill_dan пишет:Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).
Кирилл, я правильно понял, ты и есть автор этого пакета?
когда я прочитал этот пассаж, я слегка охренел. в 2017м году FileReader есть как бы не во всех браузерах в принципе, грузить файл на сервер только чтобы получить его base64 совершенно не нужно – браузер умеет делать это совершенно самостоятельно:
<script> $(function() { $('#some-image-input').on('change', function () { var file = this.files[0] if (file != null && file.type.match('image.*')) { var reader = new FileReader() reader.onload = function (e) { $('#some-image-placeholder').empty().append( $('<img>').attr('src', e.target.result).css('max-width', '100%') ) } reader.readAsDataURL(file) } }) }) </script>
на сервер после этого загружается уже файл с формой как обычно. превью появляется сразу как файл выбран в инпуте
Спасибо большое за ваше замечание. Я в принципе бэкендер и не так силен в JS, как те, которые на нем каждый день пишут. Я внесу исправление в следующий релиз.
Не в сети
Страницы 1