Art*_*ger 10 php laravel blade laravel-blade
如果我使用,{{$node[0]->url}}那么Laravel的模板引擎会显示正确的结果,但是我无法弄清楚如何在@foreach循环中使用@for $ i = 0来显示所有内容这就是我在路径文件中的内容
$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'));
Run Code Online (Sandbox Code Playgroud)
这就是我在我的视图文件中尝试过的
@for($i=0; $i < 4; $i++)
@endfor
@foreach ($oReturn as $node)
<li>{{$node[$i]->url}}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
对不起,这是完整的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
Run Code Online (Sandbox Code Playgroud)
mor*_*tic 28
简单的答案是,foreachBlade中的工作方式与常规PHP相同foreach.你应该可以这样做:
@foreach ($nodes as $node)
<li>{{ $node->url }}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
如果需要访问每个节点的数组键值:
@foreach ($nodes as $key => $node)
<li>{{ $key }}: {{ $node->url }}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
但是,我认为问题可能不在于您的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' ) );
Run Code Online (Sandbox Code Playgroud)
会回来:
Array(
[oReturn] => stdClass Object
(
[entry] => Array
(
[0] => Array
(
[0] => SimpleXMLElement Object()
[1] => SimpleXMLElement Object()
[2] => SimpleXMLElement Object()
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
所以当你做@foreach ($oReturn as $node)的时候,值$node就是entry[]数组,它有一个单独的元素,就是一个节点数组.从您的输入中不清楚这些节点甚至有url元素.如果您确实希望遍历节点,则必须执行以下操作:
@foreach ($oReturn->entry[0] as $node)
<li>{{ $node->url }}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
这有意义吗?我想你需要重新思考你的创作$oReturn.
鉴于以下反馈和上述print_r声明的输出,以下内容应该有效:
@foreach ($oReturn->entry as $node)
<li>{{ (string) $node->url }}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
将(string)结果转换$node->url为字符串.否则PHP可能会将其视为某种对象.SimpleXMLElement可能很奇怪.
| 归档时间: |
|
| 查看次数: |
40616 次 |
| 最近记录: |