У меня есть форма создания с некоторым полем, например; имя, цена, категория, ... и поле ввода для файла изображения.
это мой create.blade.php:
@extends('layouts.app')
@section('content')
<div class = "container">
<div class = "card mt-5">
<div class = "card-body">
<div class = "card-title">
create product
</div>
</div>
</div>
<form method = "post" action = "{{route('books.store')}}" enctype = "multipart/form-data">
{{csrf_field()}}
<div class = "form-group">
<label for = "name">Name</label>
<input type = "text" class = "form-control" name = "name" id = "name" aria-describedby = "emailHelp" value = "{{old('name')}}" placeholder = "Enter name">
</div>
<div class = "form-group">
<label for = "pages">pages</label>
<input type = "text" class = "form-control" id = "pages" name = "pages" value = "{{old('pages')}}" placeholder = "pages">
</div>
<div class = "form-group">
<label for = "ISBN">ISBN</label>
<input type = "text" class = "form-control" id = "ISBN" name = "ISBN" value = "{{old('ISBN')}}" placeholder = "ISBN">
</div>
<div class = "form-group">
<label for = "price">price</label>
<input type = "text" class = "form-control" id = "price" name = "price" value = "{{old('price')}}" placeholder = "price">
</div>
<div class = "form-group">
<label for = "published_at">published_at</label>
<input type = "date" class = "form-control" id = "published_at" name = "published_at" value = "{{old('published_at')}}" placeholder = "published_at">
</div>
<div class = "form-group">
<label for = "published_at">انتخاب تصویر</label>
<input type = "file" name = "file" id = "file">
</div>
<div class = "form-group">
<label for = "category_id">CATEGORY ID</label>
<select name = "category_id[]" class = "form-control" multiple>
@foreach($categories as $category)
<option value = "{{$category->id}}">
{{$category->name}}
</option>
@endforeach
</select>
</div>
<div class = "form-group">
<label for = "author_id"> Author</label>
<select name = "author_id[]" class = "form-control" multiple>
@foreach($authors as $author)
<option value = "{{$author->id}}">
{{$author->name}}
</option>
@endforeach
</select>
</div>
@if ($errors->any())
<div class = "alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<button type = "submit" class = "btn btn-success">Submit</button>
</form>
</div>
@endsectionи это мой контроллер:
<?php
namespace App\Http\Controllers;
use App\author;
use App\book;
use App\category;
use App\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;
class BookController extends Controller
{
public $book;
public $file;
/**
public function __construct()
{
$this->middleware('auth')->only('create');
}
*/
public function index()
{
$books = Book::with(['user'])->get();
return view('books.index', compact('books'));
}
public function show($id)
{
$book = Book::with('categories','authors')->find($id);
return view('books.show', compact('book'));
}
public function create()
{
$categories = Category::all();
$authors = Author::all();
$files= File::all();
return view('books.create', compact('categories','authors','files'));
}
public function store(Request $request)
{
$this->validate($request,
[
'name'=>'required|string|max:256',
'pages'=>'required|integer|numeric',
'ISBN'=>'required|string|numeric',
'price'=>'required|integer|numeric',
'published_at'=>'required|date|date',
'file'=>'required',
]
);
if ($request->hasFile('file')) {
$filename = $request->file('file')->getClientOriginalName();
$request->file->storeAs('public', $filename);
$file = new File;
$file->name = $filename;
$file->save();
}
$book = Auth::User()->books()->create($request->except('_token'));
$book->categories()->attach($request->get('category_id'));
$book->authors()->attach($request->get('author_id'));
$book->files()->attach($request->get('book_id'));
return redirect('/books');
}
}
its web.php:
<!-- begin snippet: js hide: false console: true babel: false -->и index.blade.php, где мы можем видеть поля в браузере:
@extends('layouts.app')
@section('content')
<div class = "container">
<table class = "table">
<tr>
<th>
Book Name
</th>
<th>
Creator
</th>
</tr>
@foreach($books as $book)
<tr>
<td><a href = {{"/books/".$book->id}}>{{$book->name}}</a></td>
<td>{{$book->user->name}}</td>
@can('update',$book)
<td><a href = "{{Route('books.edit',['id'=>$book->id])}}" class = "btn btn-primary">edit</a></td>
<!-- Button trigger modal -->
<td> <button type = "button" class = "btn btn-danger" data-toggle = "modal" data-target = "#exampleModal">
delete
</button>
</td>
@else
<td>
</td>
@endcan
<td>
</td>
</tr>
@endforeach
</table>
<div class = "mt-3"></div>
<a href = "{{'/books/create'}}" class = "btn btn-success btn-block">Create</a>
</div>
@endsectionвесь мой код работает правильно, но мой вопрос в том, как я могу отобразить файл изображения в браузере? Я имею в виду; как можно использовать тег img в index.blade.php, чтобы это изображение отображалось в браузере? (Я не писал весь свой код, потому что он был бы слишком длинным, и мне просто нужен короткий код в теге img, примерно так:
'<img src = "public/' . $file->getClientOriginalName() .'" />';но вы знаете, что это не работает с лезвием. Что я могу сделать?
@ChristianGallarmin нет в папке изображений и прямо в публичном доступе, я не делал папку публичной. как эта часть моего кода: $ request-> file-> storeAs ('public', $ filename);
каков результат, когда вы dd ($ file-> getClientOriginalName ());
Ваши изображения находятся в общей папке, попробуйте: <img src = "{{ asset('file_name.extention') }}" />
@ChristianGallarmin Я получил эту ошибку: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: getClientOriginalName ()
@GihanLakshan Я использовал ваш способ и не получил ошибки, но он не показывает изображения изображения: / возможно, у моего пути есть проблемы? Ха?
@AtefehRezakhah, а где ваша функция getClientOriginalName ()?
@ChristianGallarmin в UplodedFile.php: общедоступная функция getClientOriginalName () {return $ this-> originalName; }
@AtefehRezakhah проверьте свой путь к изображению в браузере, просмотрев его источник, и убедитесь, что путь правильный






Вы можете получить путь к изображению, используя функции Laravel ресурсы() или url ().
Функция актив() генерирует URL для актива, используя текущую схему запроса (HTTP или HTTPS):
<img src = "{{ asset('img/photo.jpg') }}">
Функция url () генерирует полный URL-адрес для заданного пути:
<img src = "{{ url('img/photo.jpg') }}">
Если ваш файл находится непосредственно в общей папке, чем должен быть ваш код,
<img src = "{{ asset( $file->getClientOriginalName() ) }}" >
Решение вашей проблемы с помощью asset ()
Пожалуйста, не используйте изображения в качестве ответов. Вместо этого вставьте соответствующий код
@BhavdipPambhar Я написал <img src = "{{asset ($ file-> getClientOriginalName ())}}" />, но получил эту ошибку: Undefined variable: file (View: C: \ wamp64 \ www \ blog \ shop \ resources \ views \ books \ index.blade.ph p) - Atefeh Rezakhah только что редактировал
$file Эта переменная существует в вашем файле лезвия?
@AtefehRezakhah Определите вашу переменную. $ файл. Если вы используете другую переменную, используйте это имя вместо $ file.
@ MarcinNabiałek Спасибо. На самом деле я понятия не имею, как добавить HTML с ответом. Итак, пытаюсь прикрепить изображение сюда, чтобы получить быстрый ответ на запрос Атефех Резаха. Теперь я сделал.
@GihanLakshan Я определил $ file в контроллере, как я могу определить $ file в index.blade? Я использую другую переменную, например $ book, и у нее нет проблем (вы можете увидеть в моей треске). Что я должен делать?
return view('books.index', compact('books', 'file'));@GihanLakshan я пишу return view ('books.index', compact ('books', 'file')); вместо return redirect ('/ books'); внутри публичного хранилища функций (), но получена ошибка: неопределенная переменная: книги
В вашей функции магазина нет такой переменной, как $books, одна из них - $book, поэтому вы должны использовать ее как этот return view('books.index', compact('book', 'file'));
был ли ваш путь к изображениям внутри public / images?