问题
I'm making a website where users can upload their own profile picture, with their credentials such as name, email, password, and dob using Laravel Authentication.
After doing php artisan make:auth
, there's this function in AuthController.php
:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'dob' => $data['dob'],
'profile_picture' => $data['profile_picture],
]);
}
and here's my form:
<form class="form-horizontal" role="form" method="POST" action="{{ url('/register') }}" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email" class="col-md-4 control-label">E-mail Address</label>
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}">
@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
<label for="password" class="col-md-4 control-label">Password</label>
<input id="password" type="password" class="form-control" name="password">
@if ($errors->has('password'))
<span class="help-block">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
<div class="form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}">
<label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>
<input id="password-confirm" type="password" class="form-control" name="password_confirmation">
@if ($errors->has('password_confirmation'))
<span class="help-block">
<strong>{{ $errors->first('password_confirmation') }}</strong>
</span>
@endif
</div>
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Fullname</label>
<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}">
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
<div class="form-group{{ $errors->has('dob') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Date of Birth</label>
<input id="dateOfBirth" type="date" class="form-control" name="dob">
@if ($errors->has('dob'))
<span class="help-block">
<strong>{{ $errors->first('dob') }}</strong>
</span>
@endif
</div>
<div class="form-group{{ $errors->has('profile_picture') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Profile Picture</label>
<input id="profilePicture" type="file" class="form-control" name="profile_picture">
@if ($errors->has('profile_picture'))
<span class="help-block">
<strong>{{ $errors->first('profile_picture') }}</strong>
</span>
@endif
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">
<i class="fa fa-btn fa-user"></i> Register
</button>
</div>
</form>
I would like to save the image filename with its extension. But how do I do it? How to get only his filename in string, move the image file to public folder, and save it into XAMPP database?
回答1:
If you just want to save the name and upload to public directory in profile_images folder, then you can do something like this:
protected function create(array $data)
{
$request = request();
$profileImage = $request->file('profile_picture');
$profileImageSaveAsName = time() . Auth::id() . "-profile." . $profileImage->getClientOriginalExtension();
$upload_path = 'profile_images/';
$profile_image_url = $upload_path . $profileImageSaveAsName;
$success = $profileImage->move($upload_path, $profileImageSaveAsName);
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'dob' => $data['dob'],
'profile_picture' => $profile_image_url,
]);
}
回答2:
by getting Extension and set file name you can move your file into a public folder and save the data
here is create function save file
protected function create(array $data)
{
$file_extention = $data['img_profile']->getClientOriginalExtension();
$file_name = time().rand(99,999).'image_profile.'.$file_extention;
$file_path = $data['img_profile']->move(public_path().'/users/image',$file_name);
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'dob' => $data['dob'],
'profile_picture' => $file_path, // save full image path to database
]);
}
I hope this helps you
来源:https://stackoverflow.com/questions/47857655/uploading-picture-in-laravel-registration