我目前正在尝试将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) } }
我尝试嵌套嵌套循环,但总是遇到相同的错误,我在控制器中填充新的var并使用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获取变量。
问题是,是否有可能从刀片即第一个控制器示例中访问受保护的docker映像值?如果不是,为什么(我在这里缺少理解:)。
如何使用所有相同的值填充和排列数组。我的第二个控制器示例正在努力填充多个键和单个值。感谢您提供的任何帮助。
答案 0 :(得分:0)
id
属性就是他们所说的protected
。如果属性是protected
(而不是public
),则不能直接从对象外部对其进行访问。
之所以这样做是因为被称为“信息隐藏”,这是面向对象编程的核心。这背后的主要理由是,人们应该能够根据对象的行为而不是其实现来进行推理。
在您的情况下,您可能正在寻找一个不太哲学的答案,因此您也可以简单地使用以下方法:
@foreach ($images as $image)
{{$image->getId()}}
@endforeach