class App{
protected $controller = 'Home';
protected $method = 'index';
protected $params = [];
public function __construct(){
$url = $this->purseurl();
if (file_exists('../app/controllers' . $url[0] . '.php')){
$this->controller = $url[0];
unset($url[0]);
}
require_once '../app/controllers/' . $this->controller . '.php';
$this->controller = new $this->controller;
if(isset($url[1])){
if(method_exists($this->controller, $url[1])){
$this->method = $url[1];
unset($url[1]);
}
}
if(!empty($url)){
$this->params = array_values($url);
}
call_user_func_array([$this->controller, $this->method], $this->params);
}
public function purseurl(){
if(isset($_GET['url'])){
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
return $url;
}
}
}
和此home.php或此处
class Home{ public function index(){ echo 'home/index'; } }
以及此about.php或此处
class about{ public function index(){ echo 'about/index'; } public function page(){ echo 'about/page'; } }
和索引可能在这里
require_once '../app/init.php'; $app = new App;
当我在url上写输出的原因时>]echo'home / index';不回显“关于/索引”;
可以因为这个原因我无法帮助我学习吗?
这是我的app.php,也许问题出在这里,类App {protected $ controller ='Home'; protected $ method ='索引';受保护的$ params = [];公共功能__construct(){$ ...
$_GET['url']
提供的是类似/about/index
而不是about/index
的东西,那么错误代码可以
在App::parseUrl()
方法中。在执行explode('/', $url)
的地方,您会得到一个与['', 'about', 'index']
类似的数组,这与预期的不同,即['about', 'index']
,因此不满足App::__construct
中的第一个条件,因为您要检查的文件不存在。