在拉拉维尔中上传个人资料图片注册失败



我想在注册时上传个人资料图片

在我必须注册用户之前,之后我可以将默认用户.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 AppHttpControllersAuth;
use AppUser;
use AppHttpControllersController;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;
use IlluminateFoundationAuthRegistersUsers;
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 IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
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');
}
}

这是我的用户.php

<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password', 'avatar',
];
protected $hidden = [
'password', 'remember_token',
];
}

所以每个工作它都会将图片保存为我的数据库中的字符串,如图片.jpg但它不会将其保存在我的上传文件夹中,所以我尝试这样做:

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

但什么也没发生 它不会在我的数据库中保存任何内容 如果我单击注册页面重新加载并且没有任何反应,我不知道为什么 我不知道该怎么办 我尝试了很多东西,读了很多博客,但没有任何效果

只有在注册后,如果我转到我的个人资料并上传新图片,它才有效

但是为什么?? 所以我知道代码有效,但为什么不在寄存器控制器中?

啊,我明白了! 真是一件愚蠢的事情!!!!!

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',
]);
}

在这个函数中,我需要头像和字符串,删除后一切正常!!!天哪,现在太开心了

这是我现在的创建函数:

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,
]);
}

首先检查您的表单是否包含enctype="multipart/form-data">,并检查您的App\User.php$fillable数组在数组中包含"头像">键以将图像插入数据库。

我想你正在寻找这个:

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 **/
}
}

您不应该将"头像"列保留在$fillable变量中。您应该删除它。

最新更新