Я работаю с Laravel над разработкой своего проекта, и в основном я хочу редактировать некоторые Статьи из базы данных в своей теме, поэтому я создал колонку с именем edit.blade.php
, и в этой колонке есть строка, которая получает текущую изображение статьи:
<div class="row">
@foreach($article->images['images'] as $key => $image)
<div class="col-sm-2">
<label class="control-label">
{{$key}}
<input type="radio" name="imagesThumb" value="{{ $image }}" {{ $article->images['thumb'] ? 'checked' : '' }} />
<a href="{{$image}}"><img src="{{$image}}" width="100%"></a>
</label>
</div>
@endforeach
</div>
И модель статьи тоже выглядит так:
class Article extends Model
{
use HasFactory;
use Sluggable;
protected $guarded = [];
protected $casts = [
'images' => 'array'
];
public function sluggable()
{
return [
'slug' => [
'source' => 'title'
]
];
}
public function path()
{
return "/article/$this->slug";
}
}
А вот метод ArticleController
edit, который вызывает лезвие:
public function edit(Article $article)
{
return view('website.backend.articles.edit',compact('article'));
}
Теперь проблема в том, что всякий раз, когда я хочу перейти к этому лезвию, он возвращает эту ошибку:
ErrorException Попытка доступа к смещению массива для значения типа null (Просмотр: edit.blade.php)
И это относится к этой линии лезвия:
@foreach($article->images['images'] as $key => $image)
Поэтому я не знаю, почему он показывает мне эту ошибку, если вы знаете, пожалуйста, дайте мне знать, я был бы очень признателен за любую идею от вас, ребята...
Заранее спасибо.
ОБНОВЛЕНИЕ №2:
Вот мой метод store для ArticleController
:
public function store(ArticleRequest $request)
{
//auth()->loginUsingId(1);
$imageUrl = $this->uploadImages($request->file('images'));
auth()->user()->article()->create(array_merge(['images' => $imageUrl], $request->all()));
return redirect(route('articles.index'));
}
А вот AdminController
, который идет с методом UploadImages и расширен ArticleController
:
class AdminController extends Controller
{
protected function uploadImages($file)
{
$year = Carbon::now()->year;
$imagePath = "/upload/images/{$year}/";
$filename = $file->getClientOriginalName();
$file = $file->move(public_path($imagePath), $filename);
$sizes = ["300","600","900"];
$url['images'] = $this->resize($file->getRealPath(), $sizes, $imagePath, $filename);
$url['thumb'] = $url['images'][$sizes[0]];
return $url;
}
private function resize($path, $sizes, $imagePath, $filename)
{
$images['original'] = $imagePath . $filename;
foreach($sizes as $size)
{
$images[$size] = $imagePath . "{$size}" . $filename;
Image::make($path)->resize($size, null, function($constraint){
$constraint->aspectRatio();
})->save(public_path($images[$size]));
}
return $images;
}
}
ОБНОВЛЕНИЕ №1:
Выход dd($article);
:
App\Models\Article {#1234 ▼
#guarded: []
#casts: array:1 [▼
"images" => "array"
]
#connection: "mysql"
#table: "articles"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:12 [▼
"id" => 2
"user_id" => 1
"title" => "asdasd"
"slug" => "asdasd"
"description" => "asdsadas"
"body" => "asdsada"
"images" => "F:\xampp\tmp\php1825.tmp"
"tags" => "asdsad"
"viewCount" => 0
"commentCount" => 0
"created_at" => "2020-11-09 12:24:33"
"updated_at" => "2020-11-09 12:24:33"
]
#original: array:12 [▼
"id" => 2
"user_id" => 1
"title" => "asdasd"
"slug" => "asdasd"
"description" => "asdsadas"
"body" => "asdsada"
"images" => "F:\xampp\tmp\php1825.tmp"
"tags" => "asdsad"
"viewCount" => 0
"commentCount" => 0
"created_at" => "2020-11-09 12:24:33"
"updated_at" => "2020-11-09 12:24:33"
]
#changes: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
@foreach($article->images as $key => $image)
, если описанный выше метод не сработает, а затем опубликуйте выводdd($article);
- person sta   schedule 09.11.2020#attributes: array:12 [▶]
обновить - person sta   schedule 09.11.2020images
должен быть массивом, но его строка"images" => "F:\xampp\tmp\php1825.tmp"
сохранила изображение tmp вместо правильного имени - person sta   schedule 09.11.2020