Попытка получить ключ в цикле foreach для работы с использованием лезвия

если я использую {{$node[0]->url}} затем шаблонизатор Laravel отображает правильный результат, но я не могу понять, как отобразить все, используя @for $ i = 0 в цикле @foreach, это то, что у меня есть в моем файле маршрутов

$oReturn = new stdClass();
$fid='endpoints';//sample fid

$url = 'http://localhost:5493/sdata/$system/registry/'.$fid;

$xml = simplexml_load_file($url);
foreach($xml->xpath("//sdata:payload") as $entry) {
// xpath here must be from payload to endPoint--type
$content = $entry->xpath("./sdata:endPoint--type");

foreach($content as $c) {
// Make set of children with prefix sdata
$nodes = $c->children('sdata', true);

}

// add parsed data to the array
$oReturn->entry[] = $nodes;

}
return View::make('index', compact('oReturn'));

и это то, что я пробовал в моем файле просмотра

@for($i=0; $i < 4; $i++)
@endfor
@foreach ($oReturn as $node)
<li>{{$node[$i]->url}}</li>
@endforeach

извините, вот полный результат print_r

Array ( [oReturn] => stdClass Object
( [entry] => Array
(
[0] => SimpleXMLElement Object ( [description] => Sage 50 Accounts [protocol] => http [host] => base_3 [applicationName] => accounts50 [contractName] => SimpleXMLElement Object ( ) [dataSetName] => - [url] => http://base_3:5493/sdata/accounts50 [isBrowsable] => true [aliveStamp] => 2015-11-06T23:31:10.031+00:00 )
[1] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/{C22ACA13-3C4C-4E33-A584-CD99BD3002A6} )
[2] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/{FF476636-D4AF-4191-BDE4-891EDA349A68} )
[3] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/{C62A13D5-3FFE-43B4-9DAF-38F9055A83C7} )
[4] => SimpleXMLElement Object ( [description] => GCRM Contract [endPointType] => contract [protocol] => http [host] => base_3 [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => - [url] => http://base_3:5493/sdata/accounts50/GCRM [aliveStamp] => 2015-11-06T23:31:11.062+00:00 )
)
)
) 1

7

Решение

Ответ прост: foreach в Blade работает так же, как обычный PHP foreach, Вы должны быть в состоянии сделать что-то вроде:

@foreach ($nodes as $node)
<li>{{ $node->url }}</li>
@endforeach

Если вам нужен доступ к значению ключа массива для каждого узла:

@foreach ($nodes as $key => $node)
<li>{{ $key }}: {{ $node->url }}</li>
@endforeach

Однако я думаю, что проблема может быть не в синтаксисе Blade, а в том, как вы создали свои входные переменные. Учитывая, как вы создали $oReturn в приведенном выше коде у него не будет свойств, которые вы ожидаете увидеть. Чтобы проиллюстрировать это, вот упрощенная версия того, что вы создаете:

// initialize your return variable
$oReturn = new stdClass();

// create a dummy array <sdata:x> nodes,
// to simulate $nodes = $c->children('sdata', true);
$node = new SimpleXMLElement('<sdata:x/>');
$nodes = [ $node, $node, $node ];

// simulate adding nodes to the array of entries
$oReturn->entry[] = [ $node, $node, $node ];

// print out the resulting structure
print_r( compact( 'oReturn' ) );

вернется:

Array(
[oReturn] => stdClass Object
(
[entry] => Array
(
[0] => Array
(
[0] => SimpleXMLElement Object()
[1] => SimpleXMLElement Object()
[2] => SimpleXMLElement Object()
)
)
)
)

Итак, когда вы делаете @foreach ($oReturn as $node) значение $node будет entry[] массив, который имеет один элемент, который является массивом узлов. Из вашего ввода не ясно, что эти узлы даже имеют url элементы. Если вы хотите пройтись по узлам, вам нужно сделать что-то вроде:

@foreach ($oReturn->entry[0] as $node)
<li>{{ $node->url }}</li>
@endforeach

Имеет ли это смысл? Я думаю, вам нужно переосмыслить свое творение $oReturn,

Обновить

Ниже приведены отзывы и вывод ваших print_r Изложенное выше, должно работать следующее:

@foreach ($oReturn->entry as $node)
<li>{{ (string) $node->url }}</li>
@endforeach

(string) бросает результат $node->url нанизывать. В противном случае PHP может рассматривать его как объект. SimpleXMLElement может быть странно

15

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]