Запрос-> файл возвращает ноль, почему? - PullRequest
0 голосов
/ 27 сентября 2019

Поэтому я пытаюсь создать своего рода видеомагазин, в котором вы можете увидеть изображение фильма, название, длину и возможность удалить его.Проблема в том, что когда я пытаюсь загрузить изображение, оно всегда возвращает ноль.Также я использую Laravel 5.8.35

Я пытался с getClientOriginalExtension, но он не может работать, так как файл возвращает null

Slika означает Image

Žanr означает Genre

Наслов означает Название

Година означает Год

Фильмови означает Фильмы

Траджанье означает Длительность

Акция означает Действие

index.blade.php

<style>
    table,tr,td {
        border: 1px solid black;
    }

    table {
        border-collapse: collapse;
        width: 800px;
        font-size: 30px;
        font-weight: bold;
        text-align: center;
        align-self: center;
    }
</style>

<table>
    <tr style="background-color:lightgray">
        <td>Slika</td>
        <td>Naslov filma</td>
        <td>Godina</td>
        <td>Trajanje</td>
        <td>Akcija</td>
    </tr>
    @foreach($filmovi as $film)
    <tr>
    <td><img src="{{ $film->slika }}" alt="{{$film->slika}}"></td>
        <td>{{ $film->naslov }}</td>
        <td>{{$film->godina}}</td>
        <td>{{$film->trajanje}} minuta</td>
        <td> <a href="{{ route('filmovi.destroy', $film->id) }}" data-method="delete">[obriši]</a></td>

    </tr>
    @endforeach

    <div class="">
        <a href="{{ route('filmovi.create') }}" class="btn btn-primary">Dodaj novi film</a>
    </div>

create.blade.php

<div>

        <form action="{{ route('filmovi.store') }}" method="post">
 Naslov: <br>
 <input type="text" class="form-control" id="naslov" name="naslov">
 <br>
 Žanr: <div class="select">
    <select name="zanr" id="zanr">
        @foreach($zanr as $z )
    <option value="{{ $z->id }}">{{ $z->naziv }}</option>
        @endforeach
      </select>
</div>

  Godina: <div class="select" style="width:200px;">
    <select name="godina" id="godina">
         @for($i = (int)date("1900"); $i<=(int)date("Y"); $i++)
        <option value="{{ $i }}" name="godina" >{{ $i }}</option>
         @endfor
    </select>
  </div>

  Trajanje: <br>
  <input type="text" class="form-control" id="trajanje" name="trajanje">
  <br>

  Slika: <br>
  <form action="{{ route('filmovi.store') }}" method="post" enctype="multipart/form-data">
  <input type="file" name="slika" class="form-control" enctype="multipart/form-data">(max. 64 KB)
  <div class="form-group">
        <a href="{{ route('filmovi.index') }}" class="btn btn-primary">Natrag</a>
        <button type="submit" class="btn btn-success float-right">Objavi</button>
    </div>
  </form>
        </form>
 </div>

контроллер

<?php

namespace App\Http\Controllers;

use App\Filmovi;
use App\Zanr;
use Illuminate\Http\Request;
use App\Traits\UploadTrait;

class FilmoviController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

     use UploadTrait;
    public function index()
    {
        $filmovi = Filmovi::all();

        return view('filmovi.index', compact('filmovi'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $zanr = Zanr::all();

        return view('filmovi.create', compact('zanr'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {


        $filmovi = Filmovi::create([
            'naslov'   => request('naslov'),
            'id_zanr'    => request('zanr'),
            'godina'  => request('godina'),
            'trajanje' => request('trajanje'),
            'slika' => request('slika'),
        ]);

        if($request->has('slika'))
    {
        dd($slike = $request->file("slika"));

        $dirpath = '/uploads/slike/';

        $path=$dirpath . $slike;

        $this->uploadOne($slike, $dirpath, 'public');

        $filmovi->slika = $path;

    }
    $filmovi->save();

        return redirect()->route('filmovi.index');    
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function show(Filmovi $filmovi)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function edit(Filmovi $filmovi)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Filmovi $filmovi)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $filmovi = Filmovi::find($id);
        $filmovi->delete();

    //   \Mail::to($post->user)->send(new PostDeleted($post));

        return redirect()->route('filmovi.index');
    }

}

UploadTrait

<?php 
namespace App\Traits;

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

trait UploadTrait
{
    public function uploadOne(UploadedFile $uploadedFile, $dirpath = null, $disk = 'public')
    {
        $file = $uploadedFile->storeAs($dirpath, $uploadedFile,$disk);

        return $file;
    }
}
?>

1 Ответ

0 голосов
/ 27 сентября 2019

Насколько я вижу, есть две возможности: 1. передать csrf-token в вашу форму 2. добавить enctype="multipart/form-data" в вашу форму.

Кроме того, вы должны сохранить его в своем хранилище и связать его, используя символическую ссылку (используйте команду php artisan storage:link), проверьте документы: https://laravel.com/docs/5.8/filesystem

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...