با سلام
وقت بخیر
بنده در لاراول میخوام عملیات آپلود رو انجام بدم ولی با ارور زیر برخورد میکنم و مطالبی در موردش پیدا نکردم.
با livewire میخوام آپلود رو انجام بدم.
این هم ارور:
Call to a member function getClientOriginalName() on string
کدهای قسمت کنترلر
$user = new User();
$user->ip_id = $ip->id;
$user->name = $this->name;
$user->email = $this->email;
$user->password = bcrypt($this->password);
$photo = $this->photo;
$photoName = Carbon::now()->timestamp . '.' . $this->photo->extension();
$this->photo->storeAs('images', $photoName);
$user->is_activated = 1;
$user->is_deleted = 0;
$user->save();
کدهای قسمت ویو(فرم):
<form wire:submit.prevent="store" class="form-horizontal" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="form-group col-md-3">
<label class="form-label" for="text-input">نام و نام خانوادگی</label>
<input wire:model="name" type="text" id="text-input" class="form-control"
placeholder="محمد صالحی">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="email-input">ایمیل (پست الکترونیکی)</label>
<input wire:model="email" type="email" id="email-input" class="form-control"
placeholder="sample@sample.com">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="password-input">رمز عبور</label>
<input wire:model="password" type="password" id="password-input" class="form-control"
placeholder="*******">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="role-input">نقش کاربر</label>
<select wire:model="roleSelect" id="role" class="form-control">
<option>نقش کاربر را انتخاب کنید ...</option>
@foreach($roles as $role)
<option value="{{ $role->id }}">{{ $role->title }}</option>
@endforeach
</select>
</div>
</div>
<div class="card-footer">
<button type="submit" wire:loading.attr="disabled" class="btn btn-success">
<i class="fa fa-dot-circle-o"></i>
ثبت
</button>
</div>
</form>
لطف میکنید بررسی کنید
ورژن لاراول : 6
سلام ورژن لایو وایر شما بسیار پایین است ( ورژن لایو وایر در حال حاضر 2.4.4 هست)
و قابلیت استفاده از wire:model در input ها با تایپ فایل در ورژن 1.2.0 اضافه شده است پس شما برای استفاده از این ویژگی و ویژگی های دیگر و بهره بری از امنیت بهتر ورژن لایو وایر رو ( با توجه به این لینک) اپدیت کنید.
سلام
خود ارور به خوبی بیان میکنه که مشکل از کجاست. getClientOriginalName() رو باید بر روی object که معمولا از request میاد اعمال کنید اما دارید روی string اعمال می کنید. احتمالا داخل کنترلر برای فراخوانی request بر روی file مشکل دارید.
@yaskabod73
ممنون از شما جناب @mohaligateway
بنده با request هم تست کردم ولی باز هم همین ارور رو داد؟!
کجای کد ها شما request ها رو دریافت می کنید. کد های بالا رو بررسی کردم برای مورد upload قسمتی وجود نداره. روش upload کردن فایل هاتون مشکل داره احتمالا ببینید این لینکی که دوستمون دادن مشکلتون رو حل می کنه یا نه.
@yaskabod73
سلام مجدد خدمت دوستان
بنده روش بالا رو هم تست کردم ولی باز هم همون خطا رو دریافت میکنم.
جناب @mohaligateway بنده عرض کردم با livewire دارم کار میکنم و Request ها از طریق wire:model فرستاده میشه.
اگر نیاز هست فایل کد ها را آپلود کنم.
ممنون میشم راهنمایی کنید.
سلام
شما این متد رو کجا استفاده کردی؟!
getClientOriginalName()
توی این قسمت؟
$photo = $this->photo;
$photoName = Carbon::now()->timestamp . '.' . $this->photo->extension();
اگر اره شما باید بجای extension() اینو استفاده کنی getClientOriginalExtension()
میشه
$photo = $this->photo;
$ex = $this->photo->getClientOriginalExtension();
$photoName = Carbon::now()->timestamp . '.' . $ex;
ممنون آقای @juza66
طبق گفته شما عمل کردم. ولی دوباره همون ارور رو داد واقعاً نمیدونم چیکار باید کرد؟!
این هم کدها و ارور:
Call to a member function getClientOriginalExtension() on string
کد:
public function store()
{
$this->validate([
'name' => 'min:5',
'email' => 'required|unique:users',
'password' => 'required|min:5',
'photo.*' => 'image|max:10240' // 1MB Max
]);
// Add Info Sys
$ip = new Ip();
$ip->ip = $this->info["ip"];
$ip->browser = $this->info["browser"];
$ip->operating_system = $this->info["os"];
$ip->save();
//Add New User
$user = new User();
$user->ip_id = $ip->id;
$user->name = $this->name;
$user->email = $this->email;
$user->password = bcrypt($this->password);
$photo = $this->photo;
$ex = $this->photo->getClientOriginalExtension();
$photoName = Carbon::now()->timestamp . '.' . $ex;
$this->photo->storeAs('images', $photoName);
$user->is_activated = 1;
$user->is_deleted = 0;
$user->save();
// Add Role to User
$user->roles()->attach($this->roleSelect);
// Photos
$this->resetInput();
Session::flash('add_user', 'کاربر با موفقیت اضافه گردید.');
}
سلام وقتتون بخیر!
اول این کد رو بزن و نتیجه رو برام ارسال کن
return $request->file("photo");
وقتی نتیجه بالا رو گرفتی کد زیر رو تست کن و نتیجه جفتش رو برام ارسال کن
$file=$request->file("photo");
if ($file){
$imageName= uniqid() . "." . $file->getClientOriginalExtension();
$file->move(public_path($path), $imageName);
}
@mohaligateway درسته منم پیدا نمیکنم فرض رو براین گذاشتم که اینپوت فایلش همون نامی هست که توی کدهاش نوشته :)
ممنون از دوستان
جناب @mohaligateway کدهای سمت ویو ارسال کردم نگاه کنید ببینید مشکلی داره؟؟؟
کد سمت ویو:
<form wire:submit.prevent="store" class="form-horizontal" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="form-group col-md-3">
<label class="form-label" for="text-input">نام و نام خانوادگی</label>
<input wire:model="name" type="text" id="text-input" class="form-control"
placeholder="محمد صالحی">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="email-input">ایمیل (پست الکترونیکی)</label>
<input wire:model="email" type="email" id="email-input" class="form-control"
placeholder="sample@sample.com">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="password-input">رمز عبور</label>
<input wire:model="password" type="password" id="password-input" class="form-control"
placeholder="*******">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="role-input">نقش کاربر</label>
<select wire:model="roleSelect" id="role" class="form-control">
<option>نقش کاربر را انتخاب کنید ...</option>
@foreach($roles as $role)
<option value="{{ $role->id }}">{{ $role->title }}</option>
@endforeach
</select>
</div>
</div>
<div class="row">
<div class="form-group col-md-3">
<label class="form-label" for="ip-input">آی پی</label>
<input type="text" value="{{ $info["ip"] }}" id="ip-input" class="form-control">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="browser-input">مرورگر</label>
<input type="text" value="{{ $info["browser"] }}" id="browser-input" class="form-control">
</div>
<div class="form-group col-md-3">
<label class="form-label" for="os-input">سیستم عامل</label>
<input type="text" value="{{ $info["os"] }}" id="os-input" class="form-control">
</div>
<div class="form-group col-md-3 mt-md-4">
<label class="form-label" for="file-input">بارگذاری تصویر</label>
<input wire:model="photo" type="file" id="file-input">
</div>
</div>
<div class="card-footer">
<button type="submit" wire:loading.attr="disabled" class="btn btn-success">
<i class="fa fa-dot-circle-o"></i>
ثبت
</button>
</div>
</form>
جناب موسوی dd هم گرفتم و آدرس زیر بر میگردونه؟!!! @juza66
"C:\fakepath\01.jpg"
ممنون از آقای پارسیان همون خطای بالا رو میده @Rp76
کدهای کنترلر رو هم گذاشتم شاید اشتباهی رخ داده ممنون میشم چک بفرمایید.
class UserComponent extends Component
{
public $data;
public $roles, $roleSelect, $name, $info, $password, $email, $is_activated, $selected_id;
public $photo;
public $user_id;
public $updateMode = false;
public $isStatus = false;
public function render()
{
$this->data = User::with('roles')->get();
$this->roles = Role::all();
return view('livewire.users.component');
}
public function mount()
{
$geoip = new GeoIPLocation();
$parsed = new UserAgentParser();
$parsed = $parsed->parse(\request()->userAgent());
$this->info = array(
"ip" => $geoip->getIP(),
"browser" => $parsed->browser()->name,
"os" => $parsed->os()->name
);
}
public function status($id)
{
$user = User::find($id);
$this->isStatus = !$this->isStatus;
if ($this->isStatus) {
$user->is_activated = 1;
$user->save();
}
if (!$this->isStatus) {
$user->is_activated = 0;
$user->save();
}
}
private function resetInput()
{
$this->name = null;
$this->email = null;
$this->password = null;
$this->roleSelect = null;
}
public function store()
{
$this->validate([
'name' => 'min:5',
'email' => 'required|unique:users',
'password' => 'required|min:5',
'photo.*' => 'image|max:10240' // 1MB Max
]);
// Add Info Sys
$ip = new Ip();
$ip->ip = $this->info["ip"];
$ip->browser = $this->info["browser"];
$ip->operating_system = $this->info["os"];
$ip->save();
//Add New User
$user = new User();
$user->ip_id = $ip->id;
$user->name = $this->name;
$user->email = $this->email;
$user->password = bcrypt($this->password);
// $photo = $this->photo;
// $ex = $this->photo->getClientOriginalExtension();
// $photoName = Carbon::now()->timestamp . '.' . $ex;
// $this->photo->storeAs('images', $photoName);
$user->is_activated = 1;
$user->is_deleted = 0;
$user->save();
// Add Role to User
$user->roles()->attach($this->roleSelect);
// Photos
$this->resetInput();
Session::flash('add_user', 'کاربر با موفقیت اضافه گردید.');
}
public function edit($id)
{
$record = User::findOrFail($id);
$roles = Role::pluck('title', 'id');
$this->selected_id = $id;
$this->name = $record->name;
$this->email = $record->email;
foreach ($roles as $role) {
$this->roleSelect = $role;
}
$this->updateMode = true;
}
public function update()
{
$this->validate([
'selected_id' => 'required|numeric',
'name' => 'min:5',
'email' => 'required|email',
'password' => 'required|min:5',
'roleSelect' => 'required'
]);
if ($this->selected_id) {
$record = User::find($this->selected_id);
$record->name = $this->name;
$record->email = $this->email;
$record->password = bcrypt($this->password);
$record->save();
if ($this->roleSelect) {
$record->roles()->sync($this->roleSelect);
} else {
$record->roles()->attach($this->roleSelect);
}
$this->resetInput();
$this->updateMode = false;
Session::flash('update_user', 'کاربر با موفقیت ویرایش گردید.');
}
}
public function destroy($id)
{
if ($id) {
$record = User::where('id', $id);
$record->delete();
// $record->update([
// 'is_deleted' => 1
// ]);
Session::flash('delete_user', 'کاربر با موفقیت به زباله دان منتقل گردید.');
}
}
}
سلام شما باید این کد
use Livewire\WithFileUploads;
بالای کلاس قرار بدید
و دراولین خط کلاس این
use WithFileUploads;
را اضافه کنید .
@yaskabod73
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟