0

私が実際に行っているのは、データベースから会社のリストを取得し、それをフォームの SELECT 要素に渡すことです。そこで、配列を返すモデルファイルを作成しました

//=== return an array of $ID => $name of companies to use in dropdown in reports form
public function getTotalResult($table, $type, $id) {
        $this->table = $table;
        $select = new Select();
        $spec = new  Where();
        $spec->equalTo('status', 1);
        if ($type == 'name') {
            $spec->equalTo('id', $id);
        }
        $select->from($this->table);

        $select->where($spec);
        $resultSet = $this->selectWith($select);
        //$resultSet->buffer();
        return $resultSet;

}
public function resultList($table){
    $results = $this->getTotalResult($table, '', '');
    foreach ($results as $result) {
        $this->id[] = $result->id;
        $this->name[] = $result->name;
    }
    $result = array_combine($this->id, $this->name);
    return $result;

}

次に、コントローラーでこれをテストしたところ、必要なものが正確に返されました。

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use SpangelLogin\Model\Register;          // <-- Add this import
use SpangelLogin\Model\companyList;          // <-- Add this import
class RegisterController extends AbstractActionController
{
protected $registerTable;
protected $companyList;

 public function getcompanyList()
{
    if (!$this->companyList) {
        $sm = $this->getServiceLocator();
        $this->companyList = $sm->get('SpangelLogin\Model\companyList');
    }
    return $this->companyList;
}

public function indexAction()
{
    //== get list of companies
    $company_table = 'rs_company';
    $sector_table = 'rs_sector';
    $companiesList = $this->getcompanyList()->getName($company_table, 2);

 }
}

だから今、この companyList 配列をフォームの Select 要素に渡したいと思います。どうすればそれを達成できますか。これが、selectを使用している私のフォームです。

use Zend\Form\Form;

Zend\Form\Element を使用します。

class SectorReportForm はフォームを拡張します {

public function __construct($name = null)
{
    // we want to ignore the name passed
    parent::__construct('sectorreport');
    $companiesArray =  $this->companiesList();
    $sectorsArray =  $this->sectorsList();

    $this->setAttribute('method', 'post');
    $this->setAttribute('enctype','multipart/form-data');

    $this->add(array(     
        'type' => 'Zend\Form\Element\Select',       
        'name' => 'company',
        'attributes' =>  array(
            'id' => 'company',  
            'multiple' => true,               
            'options' => $companiesArray,
        ),
        'options' => array(
            'label' => 'Company',
        ),
    ));  


    $this->add(array(
        'name' => 'submit',
        'attributes' => array(
            'type'  => 'submit',
            'value' => 'Upload',
            'id' => 'submitbutton',
            'class' => 'button violet right'
        ),
    ));
}


}
4

1 に答える 1

1

設計の観点からは、Dependency-Injection を介してこれを処理するのが最善の方法です。人々を非常に混乱させる卑劣な流行語ですが、実際には、オブジェクト間でデータを転送すること以外の何物でもありません :P

フォームの一般的な依存性注入は、次の回答と私のブログ記事を見ればわかります

このアプローチを取りたくない場合は、コントローラー レベルでこれを処理することもできます。

$form   = new My\Form();
$select = $form->get('selectCountries');

$model    = new My\Countries();
$listData = $model->getCountriesAsArray();

$select->setValueOptions($listData);

私はまだ別のアプローチを取ることをお勧めします ;) コントローラーもよりきれいに保ちます。これは常に良いことです. 懸念の分離!

于 2013-04-19T07:29:15.980 に答える