buzlee buzlee - 5 months ago 19
PHP Question

PHP how to render function from layout in MVC pattern?

I've a code with im working for.

class View
public $model;
public $function;
public $content;

public function __construct( $model )
$this->model = $model;
$this->templateLoader( get_class( $this->model ));

public function templateLoader( $model )
$template = "View/Layout/" . $model . ".tpl";

if ( file_exists( $template ))
$this->getContent( $template );

public function getContent( $template )
$this->content = file_get_contents( $template );

public function searchForTags()
$start = strpos( $this->content, '<%')+strlen('<%');
$end = strpos( $this->content, '%>');
$part = $end - $start;

if ( $part > 0)
$this->function = substr($this->content, $start, $part);

public function runFunction()
if ( $this->function )
var_dump( $this->model->{$this->function} );

This class load my template regarding classname. In the template if i have function

<td class="right error"> <% getLoginValidatorMsg() %></td>

i want to run it and replace into the value before it shows in my template. Somehow i cant run above function. Error:

Notice: Undefined property: LoginForm::$ getLoginValidatorMsg() in /media/htdocs/ver1/loginmanager/init/View.php on line 54

If i try to run:


will return me the value what i looking for.


It appears from the error you have a space between $ and getLoginValidatorMsg so you need to remove that space using a correctly placed trim() or just str_replace() on the whole thing. Also, it is saying it's looking for a property so you need to add () on your $this->model->{$this->function} so it turns it to a method:


Alternatively, you can use call_user_func() / call_user_func_array().