Я создаю новостной портал с использованием фреймворка laravel 5.6.Я получаю проблемы в разделе категории при загрузке изображения.Изображение успешно загружено в папку и в базу данных, но почему оно не отображается в разделе диспетчера категорий.Снимок экрана для ясности ошибки введите описание изображения здесь
index.blade.php
@extends('admin.layout.master')
@section('content')
<div class="main-content">
<div class="main-content-inner">
<div class="breadcrumbs ace-save-state" id="breadcrumbs">
<script type="text/javascript">
try{ace.settings.check('breadcrumbs' , 'fixed')} catch (e) {}
</script>
<ul class="breadcrumb">
<li>
<i class="ace-icon fa fa-home home-icon"></i>
<a href="{{ route('admin.dashboard') }}">Home</a>
</li>
<li>
<a href="{{ route($base_route) }}">{{$panel}}</a>
</li>
<li class="active">Lists</li>
</ul><!-- /.breadcrumb -->
<div class="nav-search" id="nav-search">
<form class="form-search">
<span class="input-icon">
<input type="text" placeholder="Search ..." class="nav-search-input" id="nav-search-input" autocomplete="off" />
<i class="ace-icon fa fa-search nav-search-icon"></i>
</span>
</form>
</div><!-- /.nav-search -->
</div>
<div class="page-content">
<div class="ace-settings-container" id="ace-settings-container">
<div class="btn btn-app btn-xs btn-warning ace-settings-btn" id="ace-settings-btn">
<i class="ace-icon fa fa-cog bigger-130"></i>
</div>
<div class="ace-settings-box clearfix" id="ace-settings-box">
<div class="pull-left width-50">
<div class="ace-settings-item">
<div class="pull-left">
<select id="skin-colorpicker" class="hide">
<option data-skin="no-skin" value="#438EB9">#438EB9</option>
<option data-skin="skin-1" value="#222A2D">#222A2D</option>
<option data-skin="skin-2" value="#C6487E">#C6487E</option>
<option data-skin="skin-3" value="#D0D0D0">#D0D0D0</option>
</select>
</div>
<span> Choose Skin</span>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-navbar" autocomplete="off" />
<label class="lbl" for="ace-settings-navbar"> Fixed Navbar</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-sidebar" autocomplete="off" />
<label class="lbl" for="ace-settings-sidebar"> Fixed Sidebar</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-breadcrumbs" autocomplete="off" />
<label class="lbl" for="ace-settings-breadcrumbs"> Fixed Breadcrumbs</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-rtl" autocomplete="off" />
<label class="lbl" for="ace-settings-rtl"> Right To Left (rtl)</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-add-container" autocomplete="off" />
<label class="lbl" for="ace-settings-add-container">
Inside
<b>.container</b>
</label>
</div>
</div><!-- /.pull-left -->
<div class="pull-left width-50">
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-hover" autocomplete="off" />
<label class="lbl" for="ace-settings-hover"> Submenu on Hover</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-compact" autocomplete="off" />
<label class="lbl" for="ace-settings-compact"> Compact Sidebar</label>
</div>
<div class="ace-settings-item">
<input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-highlight" autocomplete="off" />
<label class="lbl" for="ace-settings-highlight"> Alt. Active Item</label>
</div>
</div><!-- /.pull-left -->
</div><!-- /.ace-settings-box -->
</div><!-- /.ace-settings-container -->
<div class="page-header">
<h1>
{{$panel}} Manager
<small>
<i class="ace-icon fa fa-angle-double-right"></i>
Lists
</small>
</h1>
</div><!-- /.page-header -->
<div class="row">
<div class="col-xs-12">
<!-- PAGE CONTENT BEGINS -->
<div class="row">
<div class="col-xs-12">
<table id="simple-table" class="table table-bordered table-hover">
<thead>
<tr>
<th class="center">
<label class="pos-rel">
<input type="checkbox" class="ace" />
<span class="lbl"></span>
</label>
</th>
<th class="detail-col">Details</th>
<th>Title</th>
<th>Image</th>
<th>
<i class="ace-icon fa fa-clock-o bigger-110 hidden-480"></i>
Created Date</th>
<th class="hidden-480">Status</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($data['rows'] as $key => $row)
<tr>
<td class="center">
<label class="pos-rel">
<input type="checkbox" class="ace" />
<span class="lbl"></span>
</label>
</td>
<td class="center">
<div class="action-buttons">
<a href="#" class="green bigger-140 show-details-btn" title="Show Details">
<i class="ace-icon fa fa-angle-double-down"></i>
<span class="sr-only">Details</span>
</a>
</div>
</td>
<td> {{ $row->title }}</td>
<td>
@if($row->image)
<img src="{{ asset('images/.$folder.'.$row->image) }}" alt="" width="140">
@else
<p>No image</p>
@endif
</td>
<td>{{ $row->created_at }}</td>
<td class="hidden-480">
@if($row->status == 1)
<span class="label label-sm label-success">Active</span>
@else
<span class="label label-sm label-warning">Expired</span>
@endif
</td>
<td>
<div class="hidden-sm hidden-xs btn-group">
<button class="btn btn-xs btn-info">
<i class="ace-icon fa fa-pencil bigger-120"></i>
</button>
<button class="btn btn-xs btn-danger">
<i class="ace-icon fa fa-trash-o bigger-120"></i>
</button>
</div>
<div class="hidden-md hidden-lg">
<div class="inline pos-rel">
<button class="btn btn-minier btn-primary dropdown-toggle" data-toggle="dropdown" data-position="auto">
<i class="ace-icon fa fa-cog icon-only bigger-110"></i>
</button>
<ul class="dropdown-menu dropdown-only-icon dropdown-yellow dropdown-menu-right dropdown-caret dropdown-close">
<li>
<a href="{{ route($base_route.'.edit', ['id' => $row->id]) }}" class="tooltip-success" data-rel="tooltip" title="Edit">
<span class="green">
<i class="ace-icon fa fa-pencil-square-o bigger-120"></i>
</span>
</a>
</li>
<li>
<a href="{{ route($base_route.'.delete', ['id' => $row->id]) }}" class="tooltip-error" data-rel="tooltip" title="Delete">
<span class="red">
<i class="ace-icon fa fa-trash-o bigger-120"></i>
</span>
</a>
</li>
</ul>
</div>
</div>
</td>
</tr>
<tr class="detail-row">
<td colspan="8">
<div class="table-detail">
<div class="row">
<div class="col-xs-12 col-sm-2">
<div class="text-center">
<img height="150" class="thumbnail inline no-margin-bottom" alt="Domain Owner's Avatar" src="assets/images/avatars/profile-pic.jpg" />
<br />
<div class="width-80 label label-info label-xlg arrowed-in arrowed-in-right">
<div class="inline position-relative">
<a class="user-title-label" href="#">
<i class="ace-icon fa fa-circle light-green"></i>
<span class="white">Alex M. Doe</span>
</a>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-7">
<div class="space visible-xs"></div>
<div class="profile-user-info profile-user-info-striped">
<div class="profile-info-row">
<div class="profile-info-name"> Username </div>
<div class="profile-info-value">
<span>alexdoe</span>
</div>
</div>
<div class="profile-info-row">
<div class="profile-info-name"> Location </div>
<div class="profile-info-value">
<i class="fa fa-map-marker light-orange bigger-110"></i>
<span>Netherlands, Amsterdam</span>
</div>
</div>
<div class="profile-info-row">
<div class="profile-info-name"> Age </div>
<div class="profile-info-value">
<span>38</span>
</div>
</div>
<div class="profile-info-row">
<div class="profile-info-name"> Joined </div>
<div class="profile-info-value">
<span>2010/06/20</span>
</div>
</div>
<div class="profile-info-row">
<div class="profile-info-name"> Last Online </div>
<div class="profile-info-value">
<span>3 hours ago</span>
</div>
</div>
<div class="profile-info-row">
<div class="profile-info-name"> About Me </div>
<div class="profile-info-value">
<span>Bio</span>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-3">
<div class="space visible-xs"></div>
<h4 class="header blue lighter less-margin">Send a message to Alex</h4>
<div class="space-6"></div>
<form>
<fieldset>
<textarea class="width-100" resize="none" placeholder="Type something…"></textarea>
</fieldset>
<div class="hr hr-dotted"></div>
<div class="clearfix">
<label class="pull-left">
<input type="checkbox" class="ace" />
<span class="lbl"> Email me a copy</span>
</label>
<button class="pull-right btn btn-sm btn-primary btn-white btn-round" type="button">
Submit
<i class="ace-icon fa fa-arrow-right icon-on-right bigger-110"></i>
</button>
</div>
</form>
</div>
</div>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div><!-- /.span -->
</div><!-- /.row -->
<div class="hr hr-18 dotted hr-double"></div>
<!-- PAGE CONTENT ENDS -->
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.page-content -->
</div>
</div><!-- /.main-content -->
@endsection
CategoryController.php
<?php
/**
* Created by PhpStorm.
* User: ganes
* Date: 05/08/2018
* Time: 16:08
*/
namespace App\Http\Controllers\Admin;
use App\Http\Requests\Category\AddFormValidation;
use App\Http\Requests\Category\EditFormValidation;
use App\Models\Category;
use Illuminate\Http\Request;
class CategoryController extends AdminBaseController
{
protected $base_route = 'admin.category';
protected $view_path = 'admin.category';
protected $folder_name = 'category';
protected $panel = 'Category';
protected $folder_path;
public function __construct()
{
$this->folder_path = public_path().DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.$this->folder_name;
}
public function index()
{
$data = [];
$data['rows'] = Category::select('id', 'created_at', 'title','image','status')->get();
return view(parent::loadDataToView($this->view_path.'.index'),compact('data'));
}
public function add()
{
return view(parent::loadDataToView($this->view_path.'.add'));
}
public function store(AddFormValidation $request)
{
if($request->hasFile('main_image')){
$image = $request -> file('main_image');
$image_name = rand(1000, 5000).'_'.$image->getClientOriginalName();
$image->move($this->folder_path, $image_name);
}
$request->request->add([
'slug' => str_slug($request->get('title')),
'status' => $request->get('status') == 'active'?1:0,
'image' => $image_name
]);
Category::create($request->all());
$request->session()->flash('success_message','Category added successfully');
return redirect()->route($this->base_route);
}
public function edit(Request $request, $id){
$data = [];
$data['row'] = Category::where('id', $id)->first();
if(!$data['row']){
$request->session()->flash('error_message','Invalid request.');
return redirect()->route($this->base_route);
}
$data['row']->status = $data['row']->status == 1?'active':'in-active';
return view(parent::loadDataToView($this->view_path.'.edit'),compact('data'));
}
public function update(EditFormValidation $request, $id)
{
$data=[];
$data['row'] = Category::where('id',$id)->first();
if($request->hasFile('main_image')){
$image = $request -> file('main_image');
$image_name = rand(1000, 5000).'_'.$image->getClientOriginalName();
$image->move($this->folder_path, $image_name);
if( $data['row']->image && file_exists($this->folder_path.DIRECTORY_SEPARATOR.$data['row']->image))
unlink($this->folder_path.DIRECTORY_SEPARATOR.$data['row']->image);
}
$request->request->add([
'slug' => str_slug($request->get('title')),
'status' => $request->get('status') == 'active'?1:0,
'image' => isset($image_name)?$image_name:$data['row']->image
]);
$data['row']->update($request->all());
$request->session()->flash('success_message','Category added successfully');
return redirect()->route($this->base_route);
}
public function delete(Request $request, $id)
{
$data = [];
$data['row'] = Category::where('id', $id)->first();
if(!data['row']){
$request->session()->flash('error_message','Invalid request.');
return redirect()->route($this->base_route);
}
if( $data['row']->image && file_exists($this->folder_path.DIRECTORY_SEPARATOR.$data['row']->image))
unlink($this->folder_path.DIRECTORY_SEPARATOR.$data['row']->image);
$data['row']->delete();
$request->session()->flash('success_message','Category deleted successfully');
return redirect()->route($this->base_route);
}
}
AddFormValidation.php
<?php
namespace App\Http\Requests\Category;
use Illuminate\Foundation\Http\FormRequest;
class AddFormValidation extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required | unique:categories,title',
'main_image' => 'required | mimes:jpeg,bmp,png ',
];
}
}