我得到一个未定义的偏移量:0错误与laravel.奇怪的是,当我dd()它,它出现了.
$ports = $container->getPorts(); $ports = $ports[0];
这将返回Undefined offset:0
当我dd()
$ports = $container->getPorts(); dd($ports[0]); Port {#336 #privatePort: 80 #publicPort: 32780 #type: "tcp" }
完整的数组:
array:1 [▼ 0 => Port {#336 ▼ #privatePort: 80 #publicPort: 32780 #type: "tcp" } ]
我用docker-PHP sdk得到了这个错误.谁知道发生了什么?
完整代码:
public function dockerContainers() { $docker = new \Docker\Docker(); $containerManager = $docker->getContainerManager(); $containers = $containerManager->findAll(); $data = []; $x=0; foreach ($containers as $container) { $ports = $container->getPorts(); // dd($ports[0]); $ports = $ports[0]; $privatePort = $ports->getPrivatePort(); $publicPort = $ports->getPublicPort(); $data[$x++] = [ 'id' => $container->getId(),'state' => $container->getState(),'names' => $container->getNames(),'image' => $container->getimage(),'status' => $container->getStatus(),'ports' => [ 'privatePort' => $privatePort,'publicPort' => $publicPort ] ]; } return view('containers',[ 'containers' => $data ]); }
解决方法
这是因为你的一个容器没有端口,最好使用laravel
collect()方法,它使你的数组成为集合对象,然后你可以使用可用的集合方法.
请尝试以下代码……
请尝试以下代码……
foreach ($containers as $container) { //getting ports and making laravel collection object $ports = collect($container->getPorts()); if($ports->first()){ $ports = $ports->first(); $privatePort = $ports->getPrivatePort(); $publicPort = $ports->getPublicPort(); $data[$x++] = [ 'id' => $container->getId(),'publicPort' => $publicPort ] ]; } }