Есть несколько маршрутизаторов, но я решил создать очень простой маршрут для очень легкого сайта.
Вот мой index.php
$route = new Route();
$route->add('/', 'Home');
$route->add('/about', 'About');
$route->add('/contact', 'Contact');
Вот мой маршрутизатор:
<?php namespace Laws\Route;
use Laws\Controller\Home;
class Route
{
private $_uri = array();
private $_method = array();
private $_route;
public function __construct()
{
}
public function add($uri, $method = null)
{
$this->_uri[] = '/' . trim($uri, '/');
if ($method != null) {
$this->_method[] = $method;
}
}
public function submit()
{
$uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/';
foreach ($this->_uri as $key => $value) {
if (preg_match("#^$value$#", $uriGetParam)) {
$useMethod = $this->_method[$key];
new $useMethod(); // this returns an error (cannot find Home'
new Home(); // this actually works.
}
}
}
}
new $ useMethod(); не работает. возвращает ошибку 'не может найти Home' new Home(); фактически работает.
Что мне здесь не хватает?
Вы можете использовать свой параллельный способ для вызова класса, или вы можете использовать это:
call_user_func(array($classname,$methodname))
$useMethod
равнымLaws\Controller\Home
. Так что в основном$useMethod = 'Laws\\Controller\\' . $this->_method[$key];
use