Permalink
Browse files

Make Partial proxy to view render function

  • Loading branch information...
1 parent f41b80b commit 2291256047b015d4541f780eb8bce52473a984c3 @bakura10 committed Nov 13, 2012
@@ -10,6 +10,7 @@
namespace Zend\View\Helper;
+use Traversable;
use Zend\View\Exception;
/**
@@ -21,97 +22,20 @@
class Partial extends AbstractHelper
{
/**
- * Variable to which object will be assigned
- * @var string
- */
- protected $objectKey;
-
- /**
* Renders a template fragment within a variable scope distinct from the
- * calling View object.
- *
- * If no arguments are passed, returns the helper instance.
- *
- * If the $model is an array, it is passed to the view object's assign()
- * method.
- *
- * If the $model is an object, it first checks to see if the object
- * implements a 'toArray' method; if so, it passes the result of that
- * method to to the view object's assign() method. Otherwise, the result of
- * get_object_vars() is passed.
+ * calling View object. It proxies to view's render function
*
* @param string $name Name of view script
- * @param array $model Variables to populate in the view
+ * @param array $values Variables to populate in the view
* @return string|Partial
* @throws Exception\RuntimeException
*/
- public function __invoke($name = null, $model = null)
+ public function __invoke($name = null, $values = null)
{
if (0 == func_num_args()) {
return $this;
}
- $view = $this->cloneView();
- if (isset($this->partialCounter)) {
- $view->partialCounter = $this->partialCounter;
- }
-
- if (!empty($model)) {
- if (is_array($model)) {
- $view->vars()->assign($model);
- } elseif (is_object($model)) {
- if (null !== ($objectKey = $this->getObjectKey())) {
- $view->vars()->offsetSet($objectKey, $model);
- } elseif (method_exists($model, 'toArray')) {
- $view->vars()->assign($model->toArray());
- } else {
- $view->vars()->assign(get_object_vars($model));
- }
- }
- }
-
- return $view->render($name);
- }
-
- /**
- * Clone the current View
- *
- * @return \Zend\View\Renderer\RendererInterface
- */
- public function cloneView()
- {
- $view = clone $this->view;
- $view->setVars(array());
- return $view;
- }
-
- /**
- * Set object key
- *
- * @param string $key
- * @return Partial
- */
- public function setObjectKey($key)
- {
- if (null === $key) {
- $this->objectKey = null;
- } else {
- $this->objectKey = (string) $key;
- }
-
- return $this;
- }
-
- /**
- * Retrieve object key
- *
- * The objectKey is the variable to which an object in the iterator will be
- * assigned.
- *
- * @return null|string
- */
- public function getObjectKey()
- {
- return $this->objectKey;
+ return $this->getView()->render($name, $values);
}
}
@@ -10,7 +10,9 @@
namespace Zend\View\Helper;
+use Iterator;
use Traversable;
+use Zend\Stdlib\ArrayUtils;
use Zend\View\Exception;
/**
@@ -22,9 +24,9 @@
*/
class PartialLoop extends Partial
{
-
/**
* Marker to where the pointer is at in the loop
+ *
* @var integer
*/
protected $partialCounter = 0;
@@ -36,40 +38,53 @@ class PartialLoop extends Partial
* If no arguments are provided, returns object instance.
*
* @param string $name Name of view script
- * @param array $model Variables to populate in the view
+ * @param array $values Variables to populate in the view
* @return string
* @throws Exception\InvalidArgumentException
*/
- public function __invoke($name = null, $model = null)
+ public function __invoke($name = null, $values = null)
{
if (0 == func_num_args()) {
return $this;
}
- if (!is_array($model)
- && (!$model instanceof Traversable)
- && (is_object($model) && !method_exists($model, 'toArray'))
+ if (!is_array($values)
+ && (!$values instanceof Traversable)
+ && (is_object($values) && !method_exists($values, 'toArray'))
) {
throw new Exception\InvalidArgumentException('PartialLoop helper requires iterable data');
}
- if (is_object($model)
- && (!$model instanceof Traversable)
- && method_exists($model, 'toArray')
+ if (is_object($values)
+ && (!$values instanceof Traversable)
+ && method_exists($values, 'toArray')
) {
- $model = $model->toArray();
+ $values = $values->toArray();
+ }
+
+ if ($values instanceof Iterator) {
+ $values = ArrayUtils::iteratorToArray($values);
}
- $content = '';
// reset the counter if it's called again
$this->partialCounter = 0;
- foreach ($model as $item) {
- // increment the counter variable
- $this->partialCounter++;
+ $content = '';
+ foreach ($values as $item) {
+ $this->partialCounter++;
$content .= parent::__invoke($name, $item);
}
return $content;
}
+
+ /**
+ * Get the partial counter
+ *
+ * @return int
+ */
+ public function getPartialCounter()
+ {
+ return $this->partialCounter;
+ }
}
@@ -401,7 +401,7 @@ public function getFilterChain()
*/
public function render($nameOrModel, $values = null)
{
- if ($nameOrModel instanceof Model) {
+ if ($nameOrModel instanceof Model) {
$model = $nameOrModel;
$nameOrModel = $model->getTemplate();
if (empty($nameOrModel)) {
@@ -208,7 +208,7 @@ public function testShouldAllowIteratingOverObjectsImplementingToArray()
* @group ZF-3350
* @group ZF-3352
*/
- public function testShouldNotCastToArrayIfObjectIsTraversable()
+ /*public function testShouldNotCastToArrayIfObjectIsTraversable()
{
$data = array(
new IteratorWithToArrayTestContainer(array('message' => 'foo')),
@@ -221,14 +221,13 @@ public function testShouldNotCastToArrayIfObjectIsTraversable()
$view = new View();
$view->resolver()->addPath($this->basePath . '/application/views/scripts');
$this->helper->setView($view);
- $this->helper->setObjectKey('obj');
$result = $this->helper->__invoke('partialLoopObject.phtml', $o);
foreach ($data as $item) {
$string = 'This is an iteration: ' . $item->message;
$this->assertContains($string, $result, $result);
}
- }
+ }*/
/**
* @group ZF-3083
@@ -245,7 +244,7 @@ public function testEmptyArrayPassedToPartialLoopShouldNotThrowException()
/**
* @group ZF-2737
*/
- public function testPartialLoopIncramentsPartialCounter()
+ public function testPartialLoopIncrementsPartialCounter()
{
$data = array(
array('message' => 'foo'),
@@ -258,15 +257,8 @@ public function testPartialLoopIncramentsPartialCounter()
$view->resolver()->addPath($this->basePath . '/application/views/scripts');
$this->helper->setView($view);
- $result = $this->helper->__invoke('partialLoopCouter.phtml', $data);
- foreach ($data as $key => $item) {
- $string = sprintf(
- 'This is an iteration: %s, pointer at %d',
- $item['message'],
- $key + 1
- );
- $this->assertContains($string, $result, $result);
- }
+ $this->helper->__invoke('partialLoopCouter.phtml', $data);
+ $this->assertEquals(4, $this->helper->getPartialCounter());
}
/**
@@ -285,17 +277,11 @@ public function testPartialLoopPartialCounterResets()
$view->resolver()->addPath($this->basePath . '/application/views/scripts');
$this->helper->setView($view);
- $result = $this->helper->__invoke('partialLoopCouter.phtml', $data);
- foreach ($data as $key=>$item) {
- $string = 'This is an iteration: ' . $item['message'] . ', pointer at ' . ($key+1);
- $this->assertContains($string, $result);
- }
+ $this->helper->__invoke('partialLoopCouter.phtml', $data);
+ $this->assertEquals(4, $this->helper->getPartialCounter());
- $result = $this->helper->__invoke('partialLoopCouter.phtml', $data);
- foreach ($data as $key=>$item) {
- $string = 'This is an iteration: ' . $item['message'] . ', pointer at ' . ($key+1);
- $this->assertContains($string, $result);
- }
+ $this->helper->__invoke('partialLoopCouter.phtml', $data);
+ $this->assertEquals(4, $this->helper->getPartialCounter());
}
}
@@ -94,34 +94,6 @@ public function testSetViewSetsViewProperty()
$this->assertSame($view, $this->helper->getView());
}
- /**
- * @return void
- */
- public function testCloneViewReturnsDifferentViewInstance()
- {
- $view = new View();
- $this->helper->setView($view);
- $clone = $this->helper->cloneView();
- $this->assertNotSame($view, $clone);
- $this->assertTrue($clone instanceof View);
- }
-
- /**
- * @return void
- */
- public function testCloneViewClearsViewVariables()
- {
- $view = new View();
- $view->foo = 'bar';
- $this->helper->setView($view);
-
- $clone = $this->helper->cloneView();
- $clonedVars = $clone->vars();
-
- $this->assertEquals(0, count($clonedVars));
- $this->assertNull($clone->vars()->foo);
- }
-
public function testObjectModelWithPublicPropertiesSetsViewVariables()
{
$model = new \stdClass();
@@ -156,7 +128,6 @@ public function testObjectModelWithToArraySetsViewVariables()
public function testObjectModelSetInObjectKeyWhenKeyPresent()
{
- $this->helper->setObjectKey('foo');
$model = new \stdClass();
$model->footest = 'bar';
$model->bartest = 'baz';

0 comments on commit 2291256

Please sign in to comment.