Laravel 5.8 PDF upload



对于我的网站,我需要一个表格,其中包括PDF文件上传的文件,但我是新手,并且真的不知道该怎么做。

这是我到目前为止得到的,但是继续:

"太少的参数无法函数AppHttpControllersFileController::create(),0通过,正是1个预期的1>"

控制器:

<?php
namespace AppHttpControllers;
use AppUser;
use AppPayment;
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
class FileController extends Controller
{
    public function index(){
        $users = User::all();
        return view('fileupload.create', compact('users'));
    }
    protected function create(array $data)
    {
        $request = app('request');
        if($request->hasfile('file')){
            $file = $request->file('file');
            $filename = $file['filename']->getClientOriginalExtension();
            Storage::make($file)->save( public_path('/storage/loonstrookjes/' . $filename) );
            dd($filename);
        }

        return Payment::create([
            'file_name' => $filename,
            'file_path' => '/storage/loonstrookjes/',
            'user_id' => $data['employee'],
        ]);
        return route('fileupload.create');
    }
}

模型用户:

<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateFoundationAuthUser as Authenticatable;
use KyslikColumnSortableSortable;
class User extends Authenticatable
{
    use Notifiable;
    use Sortable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $table = 'users';
    protected $fillable = [
        'username', 'first_name', 'last_name', 'email', 'password',
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

型号付款:

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Payment extends Model
{
    protected $table = 'payment_list';
    protected $fillable = [
        'user_id', 'file_name', 'file_path'
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'id', 'file_name', 'file_path'
    ];
}

查看:

@extends('layouts.master')
@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">{{ __('Loonstrook uploaden') }}</div>
                    <div class="card-body">
                        <form method="POST" action="{{ route('create') }}" enctype="multipart/form-data">
                            @csrf
                            <div class="form-group row">
                                <label for="filename" class="col-md-4 col-form-label text-md-right">{{ __('Bestandsnaam') }}</label>
                                <div class="col-md-6">
                                    <input id="filename" type="text" class="form-control{{ $errors->has('filename') ? ' is-invalid' : '' }}" name="filename" value="{{ old('filename') }}" required autofocus>
                                    @if ($errors->has('filename'))
                                        <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('filename') }}</strong>
                                    </span>
                                    @endif
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="file" class="col-md-4 col-form-label text-md-right">{{ __('Bestand') }}</label>
                                <div class="col-md-6">
                                    <input id="file" type="file" class="form-control" name="file">
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="usertype" class="col-md-4 col-form-label text-md-right">{{ __('Werknemer:') }}</label>
                                <div class="col-md-6">
                                    <select class="form-control" name="type">
                                        @foreach($users as $user)
                                        <option value="{{$user->id}}">{{$user->first_name}} {{$user->last_name}}</option>
                                            @endforeach
                                    </select>
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-6 offset-md-4">
                                    <button type="submit" class="btn btn-primary">
                                        {{ __('Uploaden') }}
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

这些是我的路线:

Route::get('/create', 'FileController@index')->name('create'); 
Route::post('/create', 'FileController@create'); 

我希望有人可以帮助我找出做出了什么问题或更好的方法。预先感谢您!

编辑:

您的答案对我有很大帮助,但是现在我正面临另一个问题...

控制器现在看起来像这样:

<?php
namespace AppHttpControllers;
use AppUser;
use AppPayment;
use IlluminateSupportFacadesValidator;
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
use SymfonyComponentHttpFoundationFileUploadedFile;
UploadedFile::getMaxFilesize();
class FileController extends Controller
{
    public function index(){
        $users = User::all();
        return view('fileupload.create', compact('users'));
    }
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'filename' => ['required', 'string', 'max:255'],
            'file' => ['required', 'file'],
            'user_id' => ['required'],
        ]);
    }
    protected function create(Request $request)
    {
        $request = app('request');
        if($request->hasfile('file')){
            $file = $request->file('file');
            $filename = $request->input('filename');
            $file = $filename . '.' . $file->getClientOriginalExtension();
            $file_path = storage_path('/loonstrookjes');
            Storage::disk('local')->putFile($file_path, new File($request->file), $file);
            //$path = $request->file('file')->store( storage_path('/storage/loonstrookjes/'));
            //$path = Storage::putFile(storage_path('/loonstrookjes/'), $filename);
            //dd($upload);
            //return $put;
        }
        return Payment::create([
            'file_name' => $filename,
            'file_path' => '/storage/loonstrookjes/',
            'user_id' => $request['user'],
        ]);
        return route('fileupload.create');
    }
}

但是我遇到了一个新错误,这一次是:

致电未定义的方法照明 support facades file :: hashname()

任何想法??

您的问题是您的方法create(array $data)中有一个参数,但是您仅使用{{ route('create') }}发布表单。在这里,您是通过此路线调用该方法的情况,而无需传递所需的参数。

基本上,表单邮政方法可以接受此

的请求值

protected function create(Request $request)

因为您已经将Request用作特质。

因此,您可以从表格中获取所需的字段值。而且您不必使用$request = app('request');,因为您已经在参数变量$request上已有它。

如果您想知道

变量从前端传递(视图)使用{{ route('update', $the_variable) }}到后端(路线)。

这样,您可以在路线的最后一个/之后拥有$the_variable

希望这会有所帮助。

路由:

Route::resource('File','FileController');

控制器更改:

    public function store(Request $request)
    { 
            if($request->hasfile('file')){
               $file = $request->file('file');
               $filename = $file['filename']->getClientOriginalExtension();
               Storage::make($file)->save( public_path('/storage/loonstrookjes/' . $filename) );  
            }
           return Payment::create([
              'file_name' => $filename,
              'file_path' => '/storage/loonstrookjes/',
              'user_id' => $request->type
           ]);
           return route('fileupload.create');
     }
 }

查看更改:

form action="{{ route('File.store') }}"

最新更新