Почему выдает ошибку параметра во вьюхе?

204
04 марта 2017, 05:40

У меня есть страница search.blade.php, на которой множество блоков с картинкой и титулкой, я кликаю по ссылке,чтоб перейти в профайл этого блока, а оно выдает ошибку.... Файл search.blade.php:

 @extends('layouts.master')
 @section('content')
 @foreach($properties->chunk(4) as $propertyChunk)
    <div class="row">
        @foreach($propertyChunk as $property)
            <div class="col-md-3">                    
               <img src="{{ $property->imagePath }}" alt="..." class="img-responsive">                     
               <h3>{{ $property->title }}</h3>
               <a href="{{ route('sh.search.propertyprofile') }}">Property Profile</a>
           </div>                
        @endforeach
    </div>
@endforeach
@endsection

файл propertyprofile.blade.php:

@extends('layouts.master')
@section('content')
   <img src="{{ $properties['imagePath'] }}" alt="..." class="img-responsive">
   <h3>{{ $properties['title'] }}</h3>
@endsection

Выдает ошибку:

Undefined index: imagePath(View: /var/www/projects/auth.laravel.com/resources/views/sh/propertyprofile.blade.php)

Почему он выдает такую ошибку?я же обращаюсь к параметру массива,который создается в модели!Почему он не подтягивает значения в файле propertyprofile.blade.php?

добавляю файл routes/web.php:

Route::get('/search', [
  'uses' => 'SearchController@getSearch',
  'as' => 'sh.search'
]);
Route::get('/search/propertyprofile', [
  'uses' => 'PropertyProfileController@getPropertyProfile',
  'as' => 'sh.search.propertyprofile'
]);

Файлы SearchController и PropertyProfileController:

class SearchController extends Controller
{
public function getSearch() {
    $properties = Property::all();
    return view('sh.search', ['properties' => $properties]);
}    }
class PropertyProfileController extends Controller
{
public function getPropertyProfile() {
    $properties = Property::all();
    return view('sh.propertyprofile', ['properties' => $properties]);
}    }

Эти контроллеры одинаковые, массив properties передается так же....только вьюха search подхватывает данные из массива, а вьюха propertyprofile -нет... П.С.:если НЕ использовать массив properties во вьюхе propertyprofile, а написать Hello world, то на экране будет Hello world.

модель Property :

  class Property extends Model
  {
  protected $fillable = ['imagePath', 'title', 'description', 'price', 'id'];
  }
Answer 1

Вы же переходите по ссылке route('sh.search.propertyprofile'), проверьте в routes.php или routes/web.php (в зависимости от версии Laravel) или через php artisan routes:list куда ведет этот путь.

Вот там куда ведет этот путь вы видимо не передаете на вьюху массив $properties, тот код в вопросе к проблеме отношения не имеет.

UPD. Вы выводите на файл sh.propertyprofile массив объектов, а не 1 объект, если вы хотите детально выводить информацию по Property, то нужно в search.blade.php заменить:

<a href="{{ route('sh.search.propertyprofile') }}">Property Profile</a>

на

<a href="{{ route('sh.search.propertyprofile', ['id' => $property->id]) }}">Property Profile</a>

Замените $property->id на свою колонку которая у вас отвечает за Primary Key. И дальше в routes/web.php замените:

Route::get('/search/propertyprofile', [
  'uses' => 'PropertyProfileController@getPropertyProfile',
  'as' => 'sh.search.propertyprofile'
]);

на

Route::get('/search/propertyprofile/{id}', [
  'uses' => 'PropertyProfileController@getPropertyProfile',
  'as' => 'sh.search.propertyprofile'
]);

Потом в PropertyProfileController замените:

public function getPropertyProfile() {
    $properties = Property::all();
    return view('sh.propertyprofile', ['properties' => $properties]);
}

на

public function getPropertyProfile($id) {
    $property = Property::first($id);
    return view('sh.propertyprofile', ['property' => $property]);
}

И наконец то в файле propertyprofile.blade.php замените:

@extends('layouts.master')
@section('content')
   <img src="{{ $properties['imagePath'] }}" alt="..." class="img-responsive">
   <h3>{{ $properties['title'] }}</h3>
@endsection

на

@extends('layouts.master')
@section('content')
   <img src="{{ $property->imagePath }}" alt="..." class="img-responsive">
   <h3>{{ $property->title }}</h3>
@endsection

И тогда у вас будет работать детальная страница.

READ ALSO
Настройка postback

Настройка postback

Смешной вопрос: люди помогите разобраться с postback

343
при редактировании .htaccess выдает &ldquo;Internal Server Error&rdquo;

при редактировании .htaccess выдает “Internal Server Error”

сайт стоит на denwer и вот содержимоеhtaccess:

261
Реализация конструктора для класса String C++

Реализация конструктора для класса String C++

Здравствуйте, помогите пожалуйста, я встал в тупикМне нужно создать пользовательский класс String, унаследованный от родительского в котором...

236
массив структур через vector.выдает ошибку. vector iterator not incrementable

массив структур через vector.выдает ошибку. vector iterator not incrementable

Делаю что-то вроде дереваСоздаю корень тогда когда добавляю новую вершину и указываю корень(у меня там проверка идет) выбивает сообщение...

210