Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Добрый день, прошу помощи. Осваливаю Laravel и столкнулся с такой ошибкой
Property [news_id] does not exist on this collection instance.
news_id - id Новости в базе.
Код контроллера
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Foundation\Validation\ValidatesRequests;
use App\Http\Requests\createNewsRequest;
use App\News;
use DB;
use Image;
class NewsController extends Controller
{
use ValidatesRequests;
public function index()
{
$news = News::all();
return view('news.index', ['news' => $news]);
}
public function create()
{
return view('news.create');
}
public function store(createNewsRequest $request)
{
News::create($request->all());
return redirect()->route('news.index');
}
public function show( $id)
{
}
public function edit($id)
{
$news = News::find($id);
return view('news.edit',['news'=>$news]);
}
public function update(Request $request, $id)
{
$this->validate($request,[
'news_title'=>'required',
'news_description'=>'reqired',
'news_fulltext'=>'reqired'
]);
$news = News::find($id);
$news->fill($request->all());
$news->save();
return redirect()->route('news.index');
}
public function destroy($id)
{
//
}
}
Маршрутизация
Route::get('news', 'NewsController@index')->name('news.index');
Route::get('news/add', 'NewsController@create')->name('news.create');
Route::post('news/store', 'NewsController@store')->name('news.store');
Route::post('news/{id}', 'NewsController@show')->name('news.show');
Route::post('news/{id}/edit', 'NewsController@edit')->name('news.edit');
Route::post('news/{id}/update', 'NewsController@update')->name('news.update');
вьюшка news.edit
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-sm-12">
<h3>Редактировать новость - {{$news->news_id}}</h3>
</div>
</div>
@if($errors->any())
<div class="alert alert-danger" role="alert">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</div>
@endif
{!! Form::open(['route'=>['news.update',$news->news_id],'method'=>'PUT']) !!}
<form class="form-group">
<label>Название новости</label>
<input type="text" placeholder="" name="news_title" class="form-control" value="{{$news->news_title}}">
<label>Краткое описание</label>
<input type="text" placeholder="" name="news_description" class="form-control" value="{{$news->news_description}}" >
<label>Полное описание</label>
<textarea class="form-control" name="news_fulltext" id="FormControlTextareaNews" cols="40" rows="10" value="{{$news->news_fulltext}}"></textarea>
<label>Обложка новости</label>
<input type="file" class="form-control-file" name="news_img_title">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-outline-info" >Публикация</button>
</form>
{!! Form::close() !!}
</div>
<div class="panel"></div>
@endsection
Вьюшка news.index
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-sm-12 sm-page">
<h3>Новости</h3>
<a class="btn btn-outline-info" href="{{route('news.create')}}">Добавить новость</a>
<a class="btn btn-outline-info" href="{{route('news.edit',$news->news_id)}}">Редактировать новость</a>
<a class="btn btn-outline-info">Удалить новость</a>
</div>
@foreach ($news as $news)
<div class="col-sm-6 col-md-6">
<div class="panel">
<div class="card mb-3">
<img class="card-img-top" src=".../100px180/" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ $news->news_id }}</h5>
<h5 class="card-title">{{ $news->news_title }}</h5>
<a href="" class="card-text">{{ $news->news_description }}</a>
<p class="card-text"><small class="text-muted">{{ $news->created_at }}</small></p>
</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@endsection
Не в сети
@foreach ($news as $news)
Это ужасно. Ты сам себя путаешь где у тебя коллекция, а где элемент коллекции. Используй разные имена!
(Да, в английском слово "news" всегда во множественном числе, ну так назови одну новость $n или $item )
У коллекции реально нет атрибута news_id. А вот у элемента наверное есть.
Изменено artoodetoo (05.09.2018 06:59:59)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Предполагаю, что ошибка возникает во вьюшке news.index , а конкретно при формировании ссылки "Редактировать новость". В этом месте $news это коллекция. Непонятно какую именно новость из списка ты собрался редактировать!
Изменено artoodetoo (05.09.2018 07:00:50)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети