Я пытаюсь передать object
к partial()
посмотреть помощник. Хотя работа с обычными переменными работает нормально, я не могу передать объект этой функции.
Например, это работает нормально при использовании $this->test
частично:
$this->partial("module/folder/partial.phtml", array(
"test" => "foo",
));
Но делать то же самое с object
ничего не приведет к частичному:
$this->partial("module/folder/partial.phtml", array(
"test" => $this,
));
Я даже пытался использовать setObjectKey
что не проснулось тоже:
$this->partial()->setObjectKey("test");
$this->partial("module/folder/partial.phtml", $this);
Есть ли способ передать object
в один частичный в ZF2?
Я хочу сделать это, потому что мой взгляд на самом деле содержит много информации о частичных потребностях. Я мог бы добавить их всех построчно к частичному, но это было бы просто накладные расходы …
Когда вы передаете родитель Zend\View\Renderer\PhpRenderer
к вашему частичному будет перезаписывать / заменять $test
переменная с Zend\View\Renderer\PhpRenderer
вашего частичного, как будто это повторное использование класса. Таким образом, в результате получается объект, который пуст в качестве вашего частичного PhpRenderer
не содержит никаких других переменных.
Если вы хотите, чтобы переменные от родителя PhpRender
используйте следующее:
$this->partial('folder/partial', ['vars' => $this->vars()->getArrayCopy()]);
// Or so, so you don't need to store the originals within the vars key
$this->partial('folder/partial', $this->vars()->getArrayCopy());
Теперь внутри вашего part.phtml:
$this->vars['foo']
Чтобы подтвердить это, позвольте вашему контроллеру вернуть некоторую переменную ['foo' => 'bar']
или настроить ViewModel
с некоторыми тестовыми переменными. Теперь настройте ваш частичный:
$this->partial('folder/partial.phtml', ['test' => 'abc' 'render' => $this].
И когда вы отлаживаете или var_dump()
ваша переменная PhpRenders вы увидите, что $render
содержит переменную $test
со значением abc, а не с ключом ‘foo’ с ‘bar’ в качестве значения. Похоже, что PhpRenderer используется повторно, передавая родительский PhpRenderer
это невозможно.
Других решений пока нет …