Загрузить фотографию профиля в Laravel Ошибка регистрации - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу загрузить фотографию профиля при регистрации

До того, как мне нужно было зарегистрировать пользователя, а после этого я мог изменить файл user.jpg по умолчанию на свой профиль

но теперь я хочу загрузить свою фотографию при регистрации

это часть моего взгляда, где я хочу загрузить картинку:

<div class="form-group col-md-12">
                <label>Firmenlogo</label>
                <div class="custom-file">
                    <input type="file" name="avatar" class="custom-file-input" id="validatedCustomFile" required>
                    <input type="hidden" name="_token" value="{{csrf_token()}}">
                    <label class="custom-file-label" for="validatedCustomFile">Datei auswählen...</label>
                    <div class="invalid-feedback">Bitte laden Sie hier Ihr Firmenlogo hoch.</div>
                </div>
            </div>

а это мой контроллер:

<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{

use RegistersUsers;

protected $redirectTo = '/admin';

public function __construct()
{
    $this->middleware('guest');
}

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'avatar' => 'required|string',
    ]);
}

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'avatar' => $avatar,
    ]);
}

}

это мой файл миграции:

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('avatar')->default('default.jpg');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

а это мой user.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
    protected $fillable = [
        'name', 'email', 'password', 'avatar',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

, так что каждый работает, он сохраняет pciture в виде строки в моей базе данных, как picture.jpg, но не сохраняет его в моей папке загрузки, поэтому я пробую это:

$avatar = $data['avatar']->file('avatar');
    $filename = time() . '.' . $avatar->getClientOriginalExtension();
    Image::make($avatar)->resize(300, 300)->save(public_path('/uploads/avatars/'.$filename));

но ничего не произошло это ничего не сохраняет в моей базе данных Если я нажимаю на кнопку «Зарегистрировать страницу, перезагрузить страницу и ничего не происходит», я не знаю почему. и я не знаю что делать Я пробовал так много вещей и читал так много блогов, но ничего не работает

работает только после регистрации, если я захожу в свой профиль и загружаю новую фотографию

но почему ?? так что я знаю, что код работает, но почему бы не в регистре контроллера?

Ответы [ 4 ]

0 голосов
/ 01 августа 2019

Не следует оставлять столбец «аватар» в переменной $ fillable. Вы должны удалить его.

0 голосов
/ 05 сентября 2018

Я думаю, вы ищете это:

protected function create(Request $request)
{
    if($request->hasFile('avatar')) {

        $avatar = $request->file('avatar');
        $filename = time() . '.' . $avatar->getClientOriginalExtension();
        Image::make($avatar)->resize(300, 300)->save(public_path('/uploads/avatars/'.$filename));
        $avatarPath = '/uploads/avatars/'.$filename;

        $user = new User;
        $user->name = $request['name'];
        $user->email = $request['email'];
        $user->password = Hash::make($request['password']);
        $user->avatar = $avatarPath;
        $user->save();

        return redirect()->back(); /** or somewhere else **/
    }

}
0 голосов
/ 06 сентября 2018

А, Я ПОЛУЧИЛ ЭТО! такая глупая вещь !!!!!!

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'avatar' => 'required',
     ]);
    }

в этой функции у меня был аватар и STRING, и после того, как я удалил, все работает !!!! О боже, как счастлив теперь

теперь это моя функция создания:

 protected function create(array $data)
{
    $request = app('request');
    if($request->hasfile('avatar')){
        $avatar = $request->file('avatar');
        $filename = time() . '.' . $avatar->getClientOriginalExtension();
        Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename) );
    }
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'avatar' => $filename,
    ]);
}
0 голосов
/ 05 сентября 2018

Прежде всего, проверьте, что ваша форма имеет enctype = "multipart / form-data" и проверьте ваш App \ User.php * $ fillable массив содержит 'avatar' ключ в массиве для вставки вашего изображения в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...