Как передать массив просмотра с контроллера на просмотр

#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;