#php #laravel #collections
#php #laravel #Коллекции
Вопрос:
Я пытаюсь передать некоторые значения SEO в блейд-вид.
Мой вид блейда выглядит следующим образом :
@if(!empty($page_data))
<?php $page_data = $page_data[0]; ?>
<title>{{ $page_data->page_seo_title }}</title>
<meta name="description" content="{{ $page_data->page_seo_desc }}">
<input type="hidden" name="page_id" class="page_id" value="{{ $page_data->page_id }}">
@endif
Когда я передаю следующую коллекцию в представление, я получаю ошибку:
Попытка получить свойство не-объекта
Моя коллекция выглядит следующим образом :
Collection {#286 ▼
#items: array:1 [▼
0 => array:2 [▼
"page_seo_title" => "SEO Title"
"page_seo_desc" => "SEO Desc"
]
]
}
Я создаю коллекцию, вот так :
// Set Page Data
$page_data = collect(
[
[
'page_seo_title' => 'SEO Title',
'page_seo_desc' => 'SEO Desc'
]
]
);
Нужно ли мне определить что-то еще в коллекции, чтобы оно было «подобрано»?
Стоит отметить, что page_data работает на страницах, на которых выполняется запрос Eloquent, так что это не проблема. Мне нужно установить только эти динамические страницы. Поэтому в идеале мне не нужно менять логику блейда / просмотра. Просто логика коллекции / контроллера.
Комментарии:
1. $page_data = collect( [ ‘page_seo_title’ => ‘SEO Title’, ‘page_seo_desc’ => ‘SEO Desc’ ]); или вам нужно $page_data[0]-> page_seo_title в blade
2. Привет @iCoders это, в свою очередь, возвращает ошибку: Неопределенное смещение: 0 :/
3. затем попробуйте преобразовать коллекцию в массив, например $page_data-> toArray(); затем распечатайте его и проверьте, как будут поступать данные
4. Используйте
$page_data['page_seo_title']
вместо$page_data->page_seo_title
5. Тогда, возможно,
$page_data
это вообще пустая коллекция. Вы не можете использоватьempty()
для объектов коллекции, потому что они всегда возвращают false. Измените строку с@if(!empty($page_data))
на@if(!$page_data->isEmpty())
и посмотрите, повторится ли ошибка снова?
Ответ №1:
я обновил небольшой пример, основанный на вашем коде и его тестировании.попробуйте один раз
$page_data = collect(
[
[
'page_seo_title' => 'SEO Title',
'page_seo_desc' => 'SEO Desc'
]
]
);
//here it will print all data
print_r($page_data->toArray());
$data=$page_data->toArray();
// here it will print particular data
echo $data[0]['page_seo_title'];
Обновлено
в вашем контроллере
$data=$page_data->toArray();
return view('viewname',['data',$data];
в вашем блейде
@if(!empty($data))
<?php $new_data = $data[0]; ?>
<title>{{ $new_data['page_seo_title'] }}</title>
<meta name="description" content="{{ $new_data['page_seo_desc'] }}">
<input type="hidden" name="page_id" class="page_id" value="{{ $new_data['page_id'] }}">
Комментарии:
1. К сожалению, с этим больше ничего не происходит… Та же ошибка: Попытка получить свойство не-объекта
2. Могу ли я, возможно, попробовать какую-то логику в блейде — Проверить наличие объекта, если не проверить наличие элемента?
3. И если вы передадите его
$page_data->first()
в свой контроллер, вам не понадобятся<?php
теги в вашем представлении блейда
Ответ №2:
В вашей коллекции нет свойства page_id, но вы получаете к нему доступ в своем блейд-представлении. пожалуйста, проверьте свою эту строку
<input type="hidden" name="page_id" class="page_id" value="{{ $page_data->page_id }}">
там вы получаете доступ к page_id, но ваша коллекция не содержит свойства с page_id.