J'ai un problème et je n'ai pas idée de la façon de slove cela.Mvc Le nom de la méthode doit être une chaîne
Problème sur ce code de ligne:
public function ExecuteAction() {
return $this->{$this->action}();
}
Tous les autres succès du contrôleur fin de travail chargé, mais j'ai erreur fatale pour cela.
Fatal error: Method name must be a string in D:\xampp\htdocs\Workplace\MVC\lib\BaseController.php on line 27
Vérifiez mon code:
index.php
$fController = new FController($_GET);
$controller = $fController->CreateController();
$controller->ExecuteAction();
Fcontorler
public function createController()
{
if(class_exists($this->controller)) {
$parent = class_parents($this->controller);
if(in_array('BaseController', $parent)) {
if(method_exists($this->controller, $this->action)) {
return new $this->controller($this->action, $this->url);
}else {
echo "Method no exists";
}
}else {
echo "Bad Controller";
}
} else {
echo "Controller ". $this->controller . " class no exists";
}
}
BaseController
abstract class BaseController {
protected $urlvalues;
protected $action;
/*
* Construct
*
* @param string $action
* @param array $url
*
*/
public function __construct($action, $urlvalues) {
$this->action = $action;
$this->urlvalues = $urlvalues;
}
/*
* Execute acction
*
*/
public function ExecuteAction() {
return $this->{$this->action}();
}
localhost/Workplace/MVC/index.php?controller=hello&action=say&id=5
Que fait 'var_dump ($ this-> action)' s'il est placé dans le constructeur? – Shoe