Невозможно получить доступ к защищенному свойству - Laravel 5.7 - Docker - PullRequest
0 голосов
/ 13 сентября 2018

В настоящее время я пытаюсь собрать сайт Laravel, который может взаимодействовать через библиотеку PHP Docker, для выполнения некоторых основных задач Docker. Хотя большинство вещей я запутал, но у меня возникает проблема при попытке отобразить список изображений в индексном блейде.

Ошибка выдана:

Cannot access protected property Docker\API\Model\ImageSummary::$id (View: /var/www/html/resources/views/admin/images/index.blade.php)

В контроллере у меня есть:

public function index()
{
  $docker = Docker::create();
  $params=array("all"=>true);
  $images = $docker->imageList();
  return view('admin/images.index')->with(compact ('images'));
}

Затем в клинке я пытаюсь заполнить таблицу:

<tbody>
<td>
@foreach ($images as $image)
{{$image->id}}
@endforeach
</td>
</tbody>

Запуск Vardump на блейде для $ images отображает:

array(2) { [0]=> object(Docker\API\Model\ImageSummary)#990 (10) { ["id":protected]=> string(71) "sha256:657d7ae3892e0bf35bb240af7e81089788f74fd7ad9ab0f72fbfa6f274fcf6cc" ["parentId":protected]=> string(71) "sha256:e239fd404f67adb024ea61b9b1d16dae476a968d5dcd073e284a462fe9fcc356" ["repoTags":protected]=> array(2) { [0]=> string(23) "zmsbase:20180901-151007" [1]=> string(14) "zmsbase:latest" } ["repoDigests":protected]=> NULL ["created":protected]=> int(1535811082) ["size":protected]=> int(297427932) ["sharedSize":protected]=> int(-1) ["virtualSize":protected]=> int(297427932) ["labels":protected]=> NULL ["containers":protected]=> int(-1) } [1]=> object(Docker\API\Model\ImageSummary)#991 (10) { ["id":protected]=> string(71) "sha256:16508e5c265dcb5c05017a2a8a8228ae12b7b56b2cda0197ed5411bda200a961" ["parentId":protected]=> string(0) "" ["repoTags":protected]=> array(1) { [0]=> string(12) "ubuntu:18.04" } ["repoDigests":protected]=> array(1) { [0]=> string(78) "ubuntu@sha256:72f832c6184b55569be1cd9043e4a80055d55873417ea792d989441f207dd2c7" } ["created":protected]=> int(1534958937) ["size":protected]=> int(84117621) ["sharedSize":protected]=> int(-1) ["virtualSize":protected]=> int(84117621) ["labels":protected]=> NULL ["containers":protected]=> int(-1) } }   

Я пробовал вложение для циклов, но всегда сталкивался с одной и той же ошибкой, у меня был некоторый успех с заполнением новой переменной в контроллере и использованием методов get для заполнения массива, например

public function index()
{
  $docker = Docker::create();
  $params=array("all"=>true);
  $images = $docker->imageList($params);
  foreach ($images as $image) {
  $imagestatus[$image->getId()]=$image->getrepoTags();
  }
  return view('admin/images.index', compact ('imagestatus'));
}

В этом случае я могу получить переменные из imagestatus.

Таким образом, могут возникнуть вопросы: возможно ли получить доступ к значениям защищенного образа докера с блейда, т.е. в первом примере контроллера? Если нет, то почему (мне не хватает понимания здесь:).

Как можно заполнять и массивить с одинаковыми значениями. Мой второй пример контроллера, я изо всех сил пытаюсь заполнить больше чем ключ и единственное значение. Спасибо за любую оказанную помощь.

1 Ответ

0 голосов
/ 13 сентября 2018

Свойство id - это то, что они называют protected. Когда свойство имеет значение protected (а не public), к нему нельзя получить доступ непосредственно извне объекта.

Это делается по причине, называемой «сокрытием информации», которая является центральной в объектно-ориентированном программировании. Основная причина этого заключается в том, что нужно иметь возможность рассуждать об объекте с точки зрения его поведения, а не его реализации.

В вашем случае вы, вероятно, ищете немного менее философский ответ, так что вы также можете просто использовать это:

@foreach ($images as $image)
    {{$image->getId()}}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...