2016-12-08 8 views
1

Я пытаюсь передать object в помощник вида partial(). Хотя работа с нормальными переменными работает нормально, я не могу передать объект этой функции.Передача объекта в частичный() вид помощника в ZF2

Например, это workes штраф при использовании $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?

Я хочу сделать это, потому что мой взгляд на самом деле содержит много информации о частичных потребностях. Я мог бы добавить их все линии за линией к частичному, но это было бы просто над головой ...

+0

Второй аргумент частичного viewhelper должен быть просто массивом, и вы должны иметь возможность передавать объекты или все, что хотите, частичным. В рамках частичного использования вы должны использовать ключ как переменную: '$ test', чтобы получить объект в частичном. Может быть, вы могли бы добавить, что ваш результат от того, что вы пробовали, и как вы называете переменную в частичном. – Kwido

+0

@ Kwido Как сказал в вопросе, что я использовал '$ this-> test', но я также попробовал просто' $ test'. Но оба не работают. В результате вы не можете получить доступ к какому-либо свойству исходного объекта в частичном. Я сделал еще несколько отладок, '$ this' родительского представления и' $ test' частичных - это тип класса 'Zend \ View \ Renderer \ PhpRenderer', что является правильным вообще. Но доступ к свойству в частичном с '$ test-> foo' ничего не возвращает, в то время как использование того же в родительском с' $ this-> foo' возвращает ожидаемое значение ... – eisbehr

ответ

1

Когда вы передаете родитель 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()); 

Теперь в вашем partial.phtml:

$this->vars['foo'] 

Чтобы подтвердить это, вернуть контроллер какой-либо переменной или ['foo' => 'bar'] установите ViewModel с некоторыми тестовыми переменными. Теперь настройки вашего парциальное:

$this->partial('folder/partial.phtml', ['test' => 'abc' 'render' => $this]. 

И при отладке или var_dump() переменная PhpRenders вы увидите, что $render containts переменная $test со значением аЬс, а не ключ «Foo» с «бар» в качестве значения , Таким образом, похоже, что PhpRenderer повторно используется, поэтому передача родительского PhpRenderer невозможна.