#laravel #laravel-4
#laravel #laravel-4
Вопрос:
Я знаю, что это просто просто.. но я думаю, что мне чего-то не хватает, я получаю эту ошибку, я перепробовал все, прежде чем публиковать здесь
Trying to get property of non-object
контроллер
$temp = Servers::all();
$data = array();
foreach ($temp as $key) {
$data[] = array(
'srv_id' => $key->srv_id,
'srv_name' => $key->srv_name,
'srv_status' => $key->srv_status,
'srv_files' => $key->srv_files,
'srv_disk' => $this->ConvertBytes( $key->srv_disk ),
'srv_ip' => $key->srv_ip
);
}
return View::make( 'pages.server', compact( 'data' ) );
Если я перекачиваю код, это то, что я получаю
var_dump
array(10) {
[0]=>
array(6) {
["srv_id"]=>
string(3) "389"
["srv_name"]=>
string(3) "u02"
["srv_status"]=>
string(2) "ON"
["srv_files"]=>
string(5) "43832"
["srv_disk"]=>
string(9) "520.07 Gb"
["srv_ip"]=>
string(13) "89.39.196.138"
}
[1]=>
array(6) {
["srv_id"]=>
string(3) "392"
["srv_name"]=>
string(3) "u07"
["srv_status"]=>
string(2) "ON"
["srv_files"]=>
string(5) "42566"
["srv_disk"]=>
string(9) "495.16 Gb"
["srv_ip"]=>
string(13) "89.39.196.147"
}
Вид
Вот как я просматриваю свой массив на своей странице
@foreach($data as $server)
<td>{{ $server['srv_id'] }}</td>
<td>{{ $server['srv_name'] }}</td>
Комментарии:
1. Зачем проходить через весь этот цикл, когда вы могли бы просто выполнить
$servers = Servers::all();
, передатьcompact('servers')
в представление, а затем выполнить@foreach ($servers as $server) ... @endforeach
? Намного короче и проще для чтения и обслуживания. 🙂2. Конечно, я могу это сделать, но я обернул элемент в функцию, которая находится внутри контроллера .. и я не могу вызвать эту функцию в моем представлении
3. Тогда я бы сказал, что метод, вероятно, относится к модели. Неважно, по крайней мере, вы решили проблему. 🙂
Ответ №1:
Причина, по которой вы получаете Trying to get property of non-object
сообщение об ошибке, заключается в том, что данные в $temp
представляют собой массив, и вы пытаетесь получить к нему доступ как к объекту. Попробуйте это вместо этого.
$temp = Servers::all();
$data = array();
foreach ($temp as $key) {
$data[] = array(
'srv_id' => $key['srv_id'],
'srv_name' => $key['srv_name'],
'srv_status' => $key['srv_status'],
'srv_files' => $key['srv_files'],
'srv_disk' => $this->ConvertBytes( $key['srv_disk'] ),
'srv_ip' => $key['srv_ip']
);
}
Доступ к массивам можно получить следующим образом:
$foo['bar'];
В то время как к объектам можно получить доступ следующим образом:
$foo->bar;