Form container v containeru
- aha009
- Člen | 50
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 | 661
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ě');
}
}