Form container v containeru

aha009
Člen | 50
+
0
-

Ahoj, mám formulář, ve které používám form container. Funguje jak má.
Ale nyní bych chtěl formulář rozšířit, tak aby se opakoval pro dny v měsíci. Pro každý den se vypíše snídaně, oběd, svačina na celý měsíc. Zkoušel jsem kontejnery zanořit, ale nepochodil jsem.
Zkoušel jsem to jako stávající kontejner, ale dostanu chybu `Component with name already exists. `

Jde kontejner udělat třeba takto $form->addContainer('child', 'day') ?

Prosím nějakou radu. Děkuji

    public function create($id, $date, $userId)
    {
        $children = $this->database->table('children')->where('user_id = ?', $userId);
        $form = new UI\Form();
        $container = $form->addContainer('child');
        foreach ($children as $child) {
            $childId = $child->id;
            $child = $container->addContainer($child->id);
            $child->addHidden('child_id', $childId);

            $child->addCheckbox('breakfast', 'snídaně');
            $child->addCheckbox('lunch', 'oběd');
            $child->addCheckbox('snack', 'svačina');
            $child->addHidden('school_id');
        }

// jednotlivé dny v měsíci
    function getDaysInYearMonth(int $year = 2021, int $month = 2, string $format = "Y-n-d")
    {
        $date = DateTime::createFromFormat("Y-n", "$year-$month");
        $datesArray = array();
        for ($i = 1; $i <= $date->format("t"); $i++) {
            $datesArray[] = DateTime::createFromFormat("Y-n-d", "$year-$month-$i")->format($format);
        }
        return $datesArray;
    }

zkoušel jsem to takto

$children = $this->database->table('children')->where('user_id = ?', $userId);
$form = new UI\Form();
$container1 = $form->addContainer('child');
$container2 = $form->addContainer('day');
    foreach ($children as $child) {
        $childId = $child->id;
        $child = $container1->addContainer($childId);
        $child->addHidden('child_id', $childId);

        foreach ($this->getDaysInYearMonth() as $day) {
            $days = $container2->addContainer($day);
            $days->addCheckbox('breakfast', 'snídaně');
        }
    }

Editoval aha009 (27. 3. 2021 17:21)

Martk
Člen | 651
+
+1
-

Jestli jsem to pochopil správně, tak ke každému dítěti potřebuješ jednotlivé dny, tak by to mělo vypadat takto:

$childrenContainer = $form->addContainer('children');

foreach ($children as $child) {
	$container = $childrenContainer->addContainer((string) $child->id);

	$daysContainer = $container->addContainer('days');
	foreach ($this->getDaysInYearMonth() as $day) {
		$days = $daysContainer->addContainer($day);
		$days->addCheckbox('breakfast', 'snídaně');
	}
}
aha009
Člen | 50
+
0
-

Díky, to je přesně jak jsem to myslel.