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