/** * 2015-12-12 * Важно инициализировать дочерний филдсет именно здесь, * а не в методе @see \Df\Framework\Form\Element\Fieldset::addField(), * потому что к моменту завершения вызова @see \Df\Framework\Form\Element\Fieldset::addField() * дочерний филдсет должен быть уже инициализирован: * внутри вызова @see \Df\Framework\Form\Element\Fieldset::addField() * вызывается метод @see \Df\Framework\Form\Element\Fieldset::onFormInitialized(), * дочерние реализации которого уже требуют полной инициализации дочернего филдсета. * @override * @see \Magento\Framework\Data\Form\Element\AbstractElement::addElement() * @used-by \Magento\Framework\Data\Form\AbstractForm::addField() * @param AE $element * @param bool $after [optional] * @return $this */ public function addElement(AE $element, $after = false) { /** * 2015-12-12 * Экзотическая конструкция «instanceof self» вполне допустима: * https://3v4l.org/nWA6U */ if ($element instanceof self) { /** * 2015-12-12 * В ядре уже есть магические методы setContainer() / getContainer(), * и я сначала пробовал использовать их, однако порой ядро пихает туда * не родительский филдсет, а чёрти чё: * @see \Magento\Framework\Data\Form\Element\Collection::add() * $element->setContainer($this->_container); * https://github.com/magento/magento2/blob/2.0.0/lib/internal/Magento/Framework/Data/Form/Element/Collection.php#L110 * Здесь вот ядро пихает туда форму: объект класса @see \Magento\Framework\Data\Form * Поэтому разработал свой способ учёта иерархии. */ $element->_parent = $this; } parent::addElement($element, $after); return $this; }