1

一般来说,我是 Nette 和 php 框架的新手。我正在尝试创建一个带有选择菜单的表单,该菜单从数据库内的列中获取可选选项列表。

<?php

declare(strict_types=1);

namespace App\Presenters;

use Nette\Application\UI;

class HomepagePresenter extends UI\Presenter
{


     /** @var Nette\Database\Context */

     private $database;

     public function __construct(\Nette\Database\Context $database)
     {
         $this->database = $database;
     }

    protected function createComponentCalculationForm(): UI\Form
    {
        $result=$this->database->query('SELECT supp_name FROM suppliers');
        foreach($result as $supplier){
            $supplierList[]=$supplier;
        }

        $form = new UI\Form;
        $form->addSelect('supplier', 'Dodavatel:',$supplierList);
        $form->addText('quantity', 'Ks')
             ->setRequired()
             ->addRule($form::INTEGER,"Hodnota musí být číslo" )
             ->addRule($form::MIN,'Číslo musí být kladné!',0);
        $form->addText('price', 'Kč')
             ->setRequired()
             ->addRule($form::INTEGER,"Hodnota musí být číslo" )
             ->addRule($form::MIN,'Číslo musí být kladné!',0);
        $form->addButton('calculate', 'Spočítat')
             ->setHtmlAttribute('onclick', 'calculatePrice()');
        $form->addTextArea('result');
        return $form;
    }

}

我希望 $form 选择菜单包含供应商列表

4

1 回答 1

1

$supplier变量将包含Nette\Database\Row,您将其存储到$supplierList数组中。Form::addSelect需要数组,其中的值是可以字符串化的东西。由于Row不喜欢被字符串化,因此您需要在列表中添加一些可以执行的操作。提取列应该有效:

        $result = $this->database->query('SELECT supp_name FROM suppliers');
        foreach($result as $supplier){
            $supplierList[] = $supplier['supp_name'];
        }
于 2019-08-22T19:57:18.343 回答