Zend Framework partialLoop with associative array of models-Collection of common programming errors

I’m making a web application in Zend Framework. I’ve reached the stage of cleaning up. As things often go, I have a couple of messy view scripts that have become utterly unreadable (tons of (v)sprintf‘s and loops).

There’s one view that’s an absolute nightmare… (no/inaccurate comments, shorthand… all things considered to be mortal sins). Just an example:

$rows[$c] .= ''.sprintf('',$t.'['.$ref->getCode().']').str_replace('>'.$ref->getCValue().''.$ref->getCValue().'partialLoop('controller/_myPartial.phtml',array('model'=>$arr));
//in the partial loop:
Zend_Debug::dump($this->m);

I see all my models correctly, but their keys have all been turned into properties.

$this->FOO->someMethod();//works fine

Bur I want it to be:


I’ve also tried using $this->partialLoop()->setObjectKey('Mylib_Model_Person');, but that didn’t seem to make any difference, other then confuse me.

The only solutions I see is either array_map, but that would defeat the point (I’m trying to end up with a clean view script); or rewrite a part of my service layer, to return the data ready structured, and keep the array_map there.

I can’t help thinking that what I want to do, essentially use a partialLoop as an array_map callback, is possible. If it isn’t, is there an alternative? Any thoughts?

I’ve tried get_object_properties($this), and iterate through the object properties, to no avail, the loop simply doesn’t get executed(?!)

As it turns out $this->partialLoop()->setObjectKey('Mylib_Model_Person'); should have been $this->partialLoop()->setObjectKey('model');. If I do change this, and start the partial loop by dumping $this->model, I see my model. However:

echo $this->model->someMethod(); //throws error: method on non-object
Zend_Debug::dump(get_class_methods($this->model));//shows all methods, including someMethod()

And to add insult to injury, tears and confusion. The model implements the toArray-thing, so I tried:

echo $this->model['someData'];//Error: cannot use object of type Mylib_Model_Person as array!!

So, it’s not an object when I try to use methods, it’s an object when trying to access data as an array, and when using the magic getter method ($this->model->some_Data) it doesn’t do anything. No errors, but no output either. The view is rendered as is.

I’m thinking I ran into a bug. I’ll rapport it. Consider this:

$methods = get_class_methods($this->model);
while($m = array_shift($methods))
{
    if (substr($m,0,3) === 'get')
    {
        Zend_Debug::dump($m);//e.g getName
        Zend_Debug::dump($this->model->{$m}());//'Foobar'
        $m = 'someMethod';//copy-paste, so typo's aren't to blame
        Zend_Debug::dump($this->model->{$m}());//'the data I was after'
    }
}

So that works, but the, if I try:

$this->model->{'someMethod'}();//Error again
//or even:
$m = 'someMethod';
echo $this->model->{$m}();//Error...

That can’t be right