🔥یلدا با راکت با (( ۷۰ درصد )) تخفیف! یلدا طولانی است، اما این تخفیف نه.
مشاهده دورههاسلام دوستان من میخام سیستم دانلود فایل بعد از پرداخت پیاده سازی کنم
دیتابیس به شکل زیر طراحی کردم ایا غلطه ؟
public function up()
{
Schema::create('files', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->text('description');
$table->integer('price');
$table->string('image');
$table->string('file');
$table->string('slug')->unique();
$table->integer('hit');
$table->tinyInteger('status');
$table->integer('inventory')->default(0);
$table->timestamps();
});
Schema::create('category_file' , function(Blueprint $table) {
$table->unsignedBigInteger('category_id');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->unsignedBigInteger('file_id');
$table->foreign('file_id')->references('id')->on('files')->onDelete('cascade');
$table->primary(['category_id' , 'file_id']);
});
}
مدل فایل به شکل زیر
class File extends Model
{
use Sluggable;
protected $fillable = [
'title' , 'slug', 'description' , 'status' ,'price' , 'inventory' , 'image' , 'file'
];
protected $attributes = [
'hit'=> 1,
];
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
public function categories()
{
return $this->belongsToMany(Category::class);
}
public function user() {
return $this->belongsTo(User::class);
}
public function sluggable()
{
return [
'slug' => [
'source' => ''
]
];
}
}
کنترلر به شکل زیر
public function store(Request $request , File $files)
{
$validData = $request->validate([
'title' => 'required',
'description' => 'required',
'image' => 'required',
'file' => 'required',
'categories' => 'required',
'slug' => 'unique:files',
'status' => ''
]);
if (empty($request->slug)) {
$slug = SlugService::createSlug(File::class, 'slug', $request->title);
} else {
$slug = SlugService::createSlug(File::class, 'slug', $request->slug);
}
$request->merge(['slug' => $slug]);
$files = Storage::disk('public')->putFileAs('files' , $request->file('file') , $request->file('file')->getClientOriginalName())->create($request->all());
$files->categories()->sync($validData['categories']);
alert()->success('مطلب مورد نظر با موفقیت ثبت شد' , 'با تشکر');
return redirect(route('admin.files.index'));
}
بلید هم به شکل زیر
@component('admin.layouts.content' , ['title' => 'ایجاد فایل'])
@slot('breadcrumb')
<li class="breadcrumb-item"><a href="/admin">پنل مدیریت</a></li>
<li class="breadcrumb-item"><a href="{{ route('admin.files.index') }}">لیست فایل</a></li>
<li class="breadcrumb-item active">ایجاد فایل</li>
@endslot
@slot('script')
<script src="/js/ckeditor/ckeditor.js"></script>
<script>
CKEDITOR.replace('description', { filebrowserImageBrowseUrl: '/file-manager/ckeditor' });
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('button-image').addEventListener('click', (event) => {
event.preventDefault();
inputId = 'image_label';
window.open('/file-manager/fm-button', 'fm', 'width=1400,height=800');
});
document.getElementById('button-file').addEventListener('click', (event) => {
event.preventDefault();
inputId = 'file_label';
window.open('/file-manager/fm-button', 'fm2', 'width=1400,height=800');
});
});
// set file link
let inputId = '';
function fmSetLink($url) {
document.getElementById(inputId).value = $url;
}
$('#categories').select2({
'placeholder' : 'دسترسی مورد نظر را انتخاب کنید'
})
</script>
@endslot
<div class="row">
<div class="col-lg-12">
@include('admin.layouts.errors')
<div class="card">
<div class="card-header">
<h3 class="card-title">فرم ایجاد فایل</h3>
</div>
<!-- /.card-header -->
<!-- form start -->
<form class="form-horizontal" action="{{ route('admin.files.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="card-body">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">نام فایل</label>
<input type="text" name="title" class="form-control @error('title') is-invalid @enderror" id="inputEmail3" placeholder="نام فایل را وارد کنید" value="{{ old('title') }}">
@error('title')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="title" >نام مستعار :</label>
<div class="input-group">
<input type="text" class="form-control @error('slug') is-invalid @enderror" name="slug" value="{{old('slug')}}">
</div>
@error('slug')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="description" class="col-sm-2 control-label">توضیحات</label>
<textarea class="form-control" name="description" id="description" cols="30" rows="10" style="min-height: 300px">{{ old('description') }}</textarea>
</div>
<div class="form-group">
<label for="title" > وضعیت : </label>
<div class="input-group">
<select class="form-control" name="status" >
<option value="0">منتشر نشده</option>
<option value="1">منتشر شده</option>
</select>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">قیمت</label>
<input type="number" name="price" class="form-control @error('price') is-invalid @enderror" id="inputPassword3" placeholder="قیمت را وارد کنید" value="{{ old('price') }}">
@error('price')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">موجودی</label>
<input type="number" name="inventory" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="موجودی را وارد کنید" value="{{ old('inventory') }}">
@error('inventory')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label class="col-sm-2 control-label">آپلود تصویر شاخص</label>
<div class="input-group">
<input type="text" id="image_label" class="form-control" name="image">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-image">انتخاب</button>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">آپلود فایل</label>
<div class="input-group">
<input type="text" id="file_label" class="form-control" name="file">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-file">انتخاب</button>
</div>
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">دسته بندی ها</label>
<select class="form-control" name="categories[]" id="categories" multiple>
@foreach(\Modules\Category\Entities\Category::all() as $category)
<option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
</select>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-info">ثبت فایل</button>
<a href="{{ route('admin.files.index') }}" class="btn btn-default float-left">لغو</a>
</div>
<!-- /.card-footer -->
</form>
</div>
</div>
</div>
@endcomponent
لطفا راهنمایی کنید کدوم قسمت مشکل داره نمیتونم اطلاعات تو دیتابیس ذخیره کنم
به این شکل بنویسید.
<form class="form-horizontal" action="{{ route('admin.files.update' , 'files'/* اسم پرامتر شما که در روت مشخص کردید */ =>$files->id) }}" method="POST" enctype="multipart/form-data">
controller
public function update(Request $request, File $files)
{
$validData = $request->validate([
'title' => 'required',
'description' => 'required',
'price' => 'required',
'inventory' => 'required',
'image' => 'required',
'file' => 'required',
'categories' => 'required',
'slug' => 'unique:file',
'status' => ''
]);
$files->update($validData);
$files->categories()->sync($validData['categories']);
alert()->success('فایل مورد نظر با موفقیت ویرایش شد' , 'با تشکر');
return redirect(route('admin.files.index'));
}
blade edit
@component('admin.layouts.content' , ['title' => 'ویرایش فایل'])
@slot('breadcrumb')
<li class="breadcrumb-item"><a href="/admin">پنل مدیریت</a></li>
<li class="breadcrumb-item"><a href="{{ route('admin.users.index') }}">لیست فایل</a></li>
<li class="breadcrumb-item active">ویرایش فایل</li>
@endslot
@slot('script')
<script src="/js/ckeditor/ckeditor.js"></script>
<script>
CKEDITOR.replace('description', { filebrowserImageBrowseUrl: '/file-manager/ckeditor' });
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('button-image').addEventListener('click', (event) => {
event.preventDefault();
inputId = 'image_label';
window.open('/file-manager/fm-button', 'fm', 'width=1400,height=800');
});
document.getElementById('button-file').addEventListener('click', (event) => {
event.preventDefault();
inputId = 'file_label';
window.open('/file-manager/fm-button', 'fm2', 'width=1400,height=800');
});
});
// set file link
let inputId = '';
function fmSetLink($url) {
document.getElementById(inputId).value = $url;
}
$('#categories').select2({
'placeholder' : 'دسترسی مورد نظر را انتخاب کنید'
})
</script>
@endslot
<div class="row">
<div class="col-lg-12">
@include('admin.layouts.errors')
<div class="card">
<div class="card-header">
<h3 class="card-title">فرم ویرایش فایل</h3>
</div>
<!-- /.card-header -->
<!-- form start -->
<form class="form-horizontal" action="{{ route('admin.files.update' , ['files', 'FileController' => $files->id ]) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('patch')
<div class="card-body">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">نام فایل</label>
<input type="text" name="title" class="form-control @error('inventory') is-invalid @enderror" id="inputEmail3" placeholder="نام فایل را وارد کنید" value="{{ old('title' , $files->title) }}">
@error('title')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="slug" >نام مستعار :</label>
<div class="input-group">
<input type="text" class="form-control @error('slug') is-invalid @enderror" name="slug" value="{{$files->slug}}" placeholder="نام فایل را به انگلیسی وارد کنید">
</div>
@error('slug')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">توضیحات</label>
<textarea class="form-control" name="description" id="description" cols="30" rows="10">{{ old('description',$files->description) }}</textarea>
</div>
<div class="form-group">
<label for="title" > وضعیت : </label>
<div class="input-group">
<select class="form-control" name="status" >
<option value="1"
@if ($files->status == 1)
{{'selected'}}
@endif
>فعال
</option>
<option value="0"
@if ($files->status == 0)
{{'selected'}}
@endif
>غیرفعال
</option>
</select>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">قیمت</label>
<input type="number" name="price" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="قیمت را وارد کنید" value="{{ old('price',$files->price) }}">
@error('price')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">موجودی</label>
<input type="number" name="inventory" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="موجودی را وارد کنید" value="{{ old('inventory',$files->inventory) }}">
@error('inventory')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<hr>
<label class="col-sm-2 control-label">آپلود تصویر شاخص</label>
<div class="input-group mb-2">
<input type="text" id="image_label" class="form-control" name="image" dir="ltr" value="{{ $files->image }}">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-image">انتخاب</button>
</div>
</div>
<img class="w-25" src="{{ $files->image }}" alt="">
</div>
<div class="form-group">
<hr>
<label class="col-sm-2 control-label">آپلود فایل </label>
<div class="input-group mb-2">
<input type="text" id="file_label" class="form-control" name="file" dir="ltr" value="{{ $files->file }}">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-file">انتخاب</button>
</div>
</div>
<img class="w-25" src="{{ $files->image }}" alt="">
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">دسته بندی ها</label>
<select class="form-control" name="categories[]" id="categories" multiple>
@foreach(\Modules\Category\Entities\Category::all() as $category)
<option value="{{ $category->id }}" {{ in_array($category->id , $files->categories->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $category->name }}</option>
@endforeach
</select>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-info">ویرایش فایل</button>
<a href="{{ route('admin.files.index') }}" class="btn btn-default float-left">لغو</a>
</div>
<!-- /.card-footer -->
</form>
</div>
</div>
</div>
@endcomponent
دکمه حذف و ststus هم عمل نمیکنه
تو بخش دیگه کار میکنه ولی برای فایل کار نمیکنه
public function destroy(File $files)
{
$files->delete();
alert()->success('فایل مورد نظر با موفقیت حذف شد' , 'با تشکر');
return back();
}
public function updatestatus(File $files)
{
if ($files->status == 1) {
$files->status = 0;
} else {
$files->status = 1;
}
$files->save();
alert()->success('به روز رسانی با موفقیت انجام شد' , 'با تشکر');
return redirect(route('admin.files.index'));
}
سلام نحوه ارسال پارامتر به روت اشتباه است باید به این شکل باشد.
route('admin.files.update' , ['files' => $files->id ])
@websaz
قبلا تست کردم ولی این ارور میده بازهم
Missing required parameters for [Route: admin.files.update] [URI: admin/files/{file}]. (View: C:\xampp\htdocs\laravelpro\Modules\File\Resources\views\admin\files\edit.blade.php)
http://localhost:8000/admin/files/5/edit
شما اسم پامتر رو file گذاشتید پس باید به این شکل بنویسید.
route('admin.files.update' , ['file' => $files->id ])
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟