как обработать загрузку фото профиля пользователя
<form action="{{ route('updateuser') }}" enctype="multipart/form-data" method="POST" class="grid">
{{ csrf_field() }}
<div class="item data-photo">
<div class="data-name-profile">
<div class="file-upload">
<label>
<input type="file" name="newphoto" id="photo" value="{{ $profile->attributes->photo }}">
<span>Редактировать фото</span>
</label>
</div>
</div>
</div>
<div class="item data-info">
<div class="data-contacts">
<p>День рождения: <span>{{ $profile->attributes->birthday }}</span></p>
<p>Город: <span>{{ $profile->attributes->city }}</span></p>
<p>Номер телефона: <span>{{ $profile->attributes->phone }}</span></p>
</div>
</div>
<div class="item data-save">
<div class="data-item date">
<label for="">Дата рождения:</label>
<input type="date" placeholder="14 сентября 1992" name="birthday" value="{{ $profile->attributes->birthday }}">
</div>
<div class="data-item">
<label for="">Город:</label>
<input type="text" placeholder="Москва" name="city" value="{{ $profile->attributes->city }}">
</div>
<div class="data-item">
<label for="">Номер телефона:</label>
<input type="text" placeholder="14 сентября 1992" name="phone" value="{{ $profile->attributes->phone }}">
</div>
<div class="data-item cart">
<label for="">Номер карты или Яндекс-кошелек::</label>
<input type="text" placeholder="410017100674849" name="pay" value="{{ $profile->attributes->pay }}">
</div>
<div class="data-lesson">
<p class="title">Интересующие предметы:</p>
<div class="item">
<label for="">Экзамен/цель</label>
<select name="sessia" id="" class="select">
<option value="">ЕГЭ</option>
</select>
</div>
<div class="item">
<label for="">Предмет</label>
<select name="training" id="" class="select">
<option value="">Математика</option>
</select>
</div>
</div>
<button type="submit" class="btn-green">Сохранить изменения</button>
</div>
</form>\
в таблице users есть поле photo, как в контроллере обработать и перекинуть фото в папку images?
Простой вариант:
if ($request->hasFile('photo')) {
$destinationPath = public_path('uploads/avatars/');
$fileName = $user->id . '.jpg';
$request->file('photo')->move($destinationPath, $fileName);
$user = auth()->user();
$user->image = $destinationPath . $fileName;
$user->save();
}
Если надо хранить аватар нескольких размеров, я сделал так:
Я использую Intervention Image для работы с картинками.
В бд есть столбец avatar:
$table->json('avatar')->nullable();
В модели:
protected $casts = [
'avatar' => 'array'
];
Создал trait для того чтобы менять avatar(он у меня менялся не только в одном контроллере)
namespace App\Traits;
use File;
trait Avatar
{
/**
* Ставит аватарку под все размеры
*/
public function setUserAvatar($user, $img) { // TODO interface Image
// сохраняет начальный статус(когда только обрезана)
$img->backup();
$sizes = [
'lg' => 320,
'md' => 200,
'sm' => 133,
'circle' => 80
];
$avatar = [];
foreach ($sizes as $sizeName => $width) {
$avatar[$sizeName] = $this->saveAvatarBySize($user, $img, $sizeName, $width);
}
$user->avatar = $avatar; // json поле для аватарок
$user->save();
return $avatar;
}
protected function saveAvatarBySize($user, $img, $sizeName, $width) {
$folderPath = "avatars/$user->id";
$folderPathFull = public_path($folderPath);
$filePath = "$folderPath/$sizeName.jpg";
if (!File::exists($folderPathFull)) {
File::makeDirectory($folderPathFull, 0777, true, true);
}
$img->resize($width, null, function ($constraint) {
$constraint->aspectRatio();
})->save(public_path($filePath));
// возвращает к состоянию когда был сделан бэкап $img->backup() (тогда была только обрезаность)
$img->reset();
return config('app.url') . '/' . $filePath . '?' . rand();
}
}
Потом в контроллер добавил trait:
use App\Traits\Avatar;
class ProfileController extends BaseController
{
use Avatar;
И в методе роута делал так:
public function setAvatar(SaveAvatarRequest $request) {
$user = auth()->user();
$cropInfo = json_decode($request->cropInfo, true);
$file = $request->file('file');
$img = Image::make($file);
// Если у Вас есть данные для crop
// ->crop(
// $cropInfo['width'],
// $cropInfo['height'],
// $cropInfo['x'],
// $cropInfo['y']
// );
$avatar = $this->setUserAvatar($user, $img);
// это я возвращал измененного пользователя
// return new UserResource($user);
}
Есть форма на тильде, ссылка на форму, к ней надо подсоединить свой скрипт phpСкрипт пишу при помощи phpmail(желание заказчика)
Есть сайт на WordPressВ нём присутствует таксономия location
есть корпоративный сервис, хочу к нему подцепиться для дальнейшего парсинга с помощью cUrlв Form Data отправляются следующие значения:
Кто нибудь пользуется новой БД Tarantool ? говорят очень производительная, но официальный сайт ведет на библиотеку в гитхаб, где только можно...