Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.09.2018 02:02:30

Ошибка Property [news_id] does not exist on this collection instance

Добрый день, прошу помощи. Осваливаю 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

Не в сети

#2 05.09.2018 06:42:49

Re: Ошибка Property [news_id] does not exist on this collection instance

@foreach ($news as $news)


Это ужасно. Ты сам себя путаешь где у тебя коллекция, а где элемент коллекции. Используй разные имена!
(Да, в английском слово "news" всегда во множественном числе, ну так назови одну новость $n или $item smile )

У коллекции реально нет атрибута 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.

Не в сети

#3 05.09.2018 06:55:50

Re: Ошибка Property [news_id] does not exist on this collection instance

Предполагаю, что ошибка возникает во вьюшке 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.

Не в сети

Подвал раздела