Laravel - Невозможно установить и получить имя файла загруженного файла. - PullRequest
0 голосов
/ 04 января 2019

У меня проблема с настройкой имени аватара, чтобы я мог поместить его в базу данных, он показывает объект, а не имя файла, как вы можете видеть, я echo $filename, чтобы убедиться, что у меня есть имяобраз.но когда я print_r($sanitized), изображение является объектом.

enter image description here

Мой ожидаемый результат $sanitized должен быть:

Array
(
    [email] => superadmin@email.com
    [name] => Superadmin
    [phone] => 123123
    [avatar] => 1_avatar1546579727.jpg
)

Код:

<code>public function updateProfile(Request $request)
{
    $this->setUser($request);
    $user = $this->user;

    // Validate the request
    $this->validate($request, [
        'email' => ['sometimes', 'email', Rule::unique('users', 'email')->ignore($this->user->getKey(), $this->user->getKeyName()), 'string'],
        'name' => ['nullable', 'string'],
        'phone' => ['sometimes', 'string'],
        'avatar' => ['sometimes', 'image', 'mimes:jpeg,png,jpg,gif', 'dimensions:min_width=500,min_height=500', 'max:2048'],
    ], [
        'avatar.mimes'      => 'Uploaded file format should be jpeg, jpg, png or gif.',
        'avatar.dimensions' => 'Image should have minimum 200x200px dimensions.',
        'avatar.max'        => 'Maximum allowed file size is 2 MB.',
    ]);

    if($request->hasFile('avatar')) {
        $filename = $user->id.'_avatar'.time().'.'.request()->avatar->getClientOriginalExtension();
        Image::make(request()->avatar)->resize(300, 300)->save( public_path('uploads/avatars/'.$filename) );

        // $request->avatar = $filename;
        $request['avatar'] = $filename;
    }

    // Sanitize input
    $sanitized = $request->only([
        'email',
        'name',
        'phone',
        'avatar'
    ]);

    echo $filename . "</br>";

    echo "<pre>";
    print_r( $sanitized );
    echo "
"; return" "; // $ this-> user-> update ($ sanitized); // returnredirect () -> back () -> with ('success', 'Profile был обновлен.');}

EDIT 1

Я перепробовал все ваши ответы, результаты все те же. Код:

if($request->hasFile('avatar')) {
    $filename = $user->id.'_avatar'.time().'.'.request()->avatar->getClientOriginalExtension();
    Image::make(request()->avatar)->resize(300, 300)->save( public_path('uploads/avatars/'.$filename) );

    //This is what I've tried so far below: 
    $request->request->add(['avatar', $filename]); 
    // $request->merge(['avatar' => $filename]);
    // $request->avatar = $filename;
    // $request['avatar'] = $filename;
}

1 Ответ

0 голосов
/ 04 января 2019

Я только что исправил это, просто намекнув на @ Md.Sukel Ali

Я переместил $sanitzed = $request.. наверх, затем обновил его и не использовал напрямую переменную $request.

Рабочий код:

<code>public function updateProfile(Request $request)
{
    $this->setUser($request);
    $user = $this->user;

    // Validate the request
    $this->validate($request, [
        'email' => ['sometimes', 'email', Rule::unique('users', 'email')->ignore($this->user->getKey(), $this->user->getKeyName()), 'string'],
        'name' => ['nullable', 'string'],
        'phone' => ['sometimes', 'string'],
        'avatar' => ['sometimes', 'image', 'mimes:jpeg,png,jpg,gif', 'dimensions:min_width=500,min_height=500', 'max:2048'],
    ], [
        'avatar.mimes'      => 'Uploaded file format should be jpeg, jpg, png or gif.',
        'avatar.dimensions' => 'Image should have minimum 200x200px dimensions.',
        'avatar.max'        => 'Maximum allowed file size is 2 MB.',
    ]);

    // Sanitize input
    $sanitized = $request->only([
        'email',
        'name',
        'phone',
        'avatar'
    ]);

    if($request->hasFile('avatar')) {
        $filename = $user->id.'_avatar'.time().'.'.request()->avatar->getClientOriginalExtension();
        Image::make(request()->avatar)->resize(300, 300)->save( public_path('uploads/avatars/'.$filename) );
        $sanitized['avatar'] = $filename;
    }

    echo $filename . "</br>";

    echo "<pre>";
    print_r( $sanitized );
    echo "
"; return" "; // $ this-> user-> update ($ sanitized); // return redirect () -> back () -> with ('success', 'Профиль обновлен.');}
...