我正在构建一个zend框架项目,我第一次使用php,所以如果问题太愚蠢或者问题已经得到解答但是我没有找到它,那么事先提前我的apolagies。
我正在尝试使用从api获取的数据填充选择类型输入(下拉列表)。
我在Form类上的代码(扩展Zend \ Form \ Form)是这样的:
$url = 'http://localhost:63715/api/Local';
$jsonData = file_get_contents($url);
$jsonDataObject = json_decode($jsonData);
$local = new Element\Select('local');
$local->setLabel('Local');
$local->setAttribute('class', 'form-control');
我从API中收到的json代码是:
[{"ID": 1,"Name": "Local 1"},{"ID": 2,"Name": "Local 2"}]
我不知道如何使用我收到的数据填充$ local,我在互联网上找到的只是jquery和js。
感谢。
答案 0 :(得分:0)
试试这个:
<?php
$url = 'http://localhost:63715/api/Local';
$jsonData = file_get_contents($url);
$jsonDataArray = json_decode($jsonData,true);
$options=[];
foreach ($jsonDataArray as $data){
$options[$data['ID']] = $data['Name'];
}
$local = new Element\Select('local');
$local->setLabel('Local');
$local->setAttribute('class', 'form-control');
$local->setAttribute('options',$options);
答案 1 :(得分:0)
ZF风格:
<?php
namespace YourNamespace;
use Zend\Form\Element\Select;
use Zend\Http\Client;
use Zend\Json\Json;
class YourJsonSelect extends Select
{
/**
* @return array
*/
public function getValueOptionsDefault()
{
$client = new Client('http://localhost:63715/api/Local');
$response = $client->send();
$array = Json::decode($response->getBody(), Json::TYPE_ARRAY);
$options = [];
foreach ($array as $data) {
$options[$data['ID']] = $data['Name'];
}
return $options;
}
/**
* @return array
*/
public function getValueOptions()
{
if (!$this->valueOptions) {
$this->valueOptions = $this->getValueOptionsDefault();
}
return $this->valueOptions;
}
}
// And "voilà"
$local = new YourNamespace\YourJsonSelect('local');
$local->setLabel('Local');
$local->setAttribute('class', 'form-control');