من میخام برای یک کارمند جدولی داشته باشم که فایل هایی با پسوند doc و pdf را بتونم آپلود کنم.
برای migration و چگونگی آپلود این فایل ها باید چیکار کنم.
ممنون میشم راهنماییم کنیم.
ابتدا مایگریشن رو بسازید
php artisan make:migration create_docs_table --create=docs
متد up فایل مایگریشنتون باید چیزی شبیه زیر باشه البته میتونید فیلدهای دیگه هم اضافه کنید.
public function up()
{
Schema::create('docs', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->text('doc_path');
$table->timestamps();
});
}
برای آپلود فایل هم, وقتی از طریق فرم ارسال فایل رو فرستادید.. در کنترلرتون میتونید مثل زیر عمل کنید.
Class DocsController {
public function store(Request $rqst) {
$doc_path = $request->file('document')->store('documentations');
// document == esme input dar Form
// documentations == folderi ke file zakhire mishe
// $doc_path == esme file ke bayad dar Jadvale bala save konid.
Doc::create([]
'user_id' => auth()->user()->id,
'doc_path' => $doc_path
]);
}
}
اگر از متد ()create استفاده کردید یادتون باشه داخل Model , خاصیت fillable رو هم تنظیم کنید که به ارور Mass Assignment برنخورید.
فایل مدل Doc:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Doc extends Model
{
protected $fillable = ['user_id','doc_path'];
}
برای doc_path چطور فایل ذخیره میشه با مسیرش و فایل کجا پروژه من دایرکتوری ایجاد میکنه؟
@ali.bayat
من این ارور را دارم
FatalThrowableError (E_ERROR)
Call to a member function store() on null
اینم کد من:
public function store(Request $request)
{
$path = $request->file('document')->store('documents');
$upl->type = $request->type;
$upl->martyr_id = $request->person_id;
$upl->path = $request->path;
$upl->save();
return redirect(route('uploads.index'));
}
اینم کد ویو
<form action="{{route('uploads.store')}}" method="post" enctype="multipart/form-data" class="form-horizontal">
{{csrf_field()}}
@include('admin.section.errors')
<div class="form-group">
<div class="col-sm-3 col-md-3 col-xs-12">
<label for="type" class="control-label">نوع فایل</label>
<select name="type" class="form-control" id="type" title="نوع فایل را انتخاب کنید">
<option value="0">PDF</option>
<option value="1">Word (*.doc)</option>
<option value="2">متنی (*.txt)</option>
<option value="2">عکس</option>
<option value="2">ویدیو</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-3 col-md-3 col-xs-12">
<label for="status" class="control-label">لیست کارمندان</label>
<select name="person_id" class="form-control" id="person_id" title="انتخاب کارمند"> --}}
@foreach( $persons as $person )
<option value="{{ $person->id }}">{{ $person->firstName }} {{ $person->lastName }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-6 col-md-6 col-xs-12">
<label for="path" class="control-label">فایل</label>
<input type="file" class="form-control" name="path" id="path" placeholder="فایل خود را وارد کنید">
</div>
</div>
<div class="form-group">
<div class="col-sm-3 col-md-3 col-xs-12">
<button type="submit" class="btn btn-success btn-sm">ذخیره چند رسانه ای</button>
</div>
</div>
</form>
مشکلم حل شد
فقط تنهای مشکل من در ذخیره هست که ارور زیر را دارم
ErrorException (E_WARNING)
Creating default object from empty value
public function store(Request $request)
{
$path = $request->file('path')->store('documents');
$upl->type = $request->type;
$upl->person_id = $request->person_id;
$upl->path = $request->path;
$upl->save();
}
اینم جدولم
Schema::create('uploads', function (Blueprint $table) {
$table->increments('id');
$table->integer('person_id')->unsigned()->nullable();
$table->string('type');
$table->text('path');
$table->timestamps();
$table->foreign('person_id')->references('id')->on('persons')->onDelete('cascade');
});
@saeedkarimi454
@hhp14111
@reza.kazemi
@viva.mohammadi
@mortezasb87
@hesammousavi
فایلم اینه
Route::group(['namespace' => 'Admin' , 'middleware' => ['auth:web' , 'checkAdmin'], 'prefix' => 'admin'],function (){
$this->get('/panel' , 'PanelController@index');
$this->post('/panel/upload-image' , 'PanelController@uploadImageSubject');
$this->resource('uploads' , 'UploadController');
داخلش هست درسته؟
من در یک منو کارمندان را وارد میکنم در یک منو دیگه فایل های مستندات مثل فیلم عکس و پی دی اف و ..
که نام منو چند رسانه ای هست مثل وردپرس کاربر اونجا نام کارمند را انتخاب میکنه و فایل های مربوط بهش را آپلود میکنه.
محمد جان میگه value خالیه
وقتی از resource در روت استفاده میکنی باید مشخص کنی براش که میخوای از متد store استفاده کنی یعنی put,patch
توی کنترلر اول باید کلاس رو instantiate کنی بعد مقداردهی و ذخیره کنی
$upl = new App\Upload;
// (Upload esme model hast)
$upl->type = $request->type;
$upl->person_id = $request->person_id;
$upl->path = $request->path;
$upl->save();
ممنون من جواب گرفتم. فقط یک نکته اینکه چوطر توی Blade نشان بدم؟
مثلا فایل عکسی که آپلود شده؟
چون بهم ارور 404 میده
چطور میتونم فایلی که در storage هست را فراخوانی کنم؟
این کد منه:
<ul class="list-unstyled">
@foreach($uploads as $upload)
<li><img src="{{ $upload->path }}" alt="">{{ $upload->typeforUploadFile() }}</li>
@endforeach
</ul>
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟