我使用
PHP5来构建自己的MVC框架.我的情况是我的所有控制器都在Controller命名空间中,如下所示:
namespace Controllers
{
class Home extends \Framework\Core\Controller
{
...
}
}
在应用程序逻辑中,我需要选择从调用传递的URL调用控制器,如下所示:
namespace Framework\Core;
class Application
{
protected $controllerName = 'home';
protected $methodName = 'index';
protected $controller;
public function __construct()
{
// Parse the received URL
$url = parseUrl();
// Choose the controller, if file exists
if (file_exists('../app/controllers/' . $url[0] . '.php'))
{
$this->controllerName = $url[0];
unset($url[0]);
}
require_once '../app/controllers/' . $this->controllerName . '.php';
// Call the controller
$objToCall = '\\Controllers\\' . $this->controllerName;
$this->controller = new $objToCall(); <<<======= PROBLEM HERE
... Proceed choosing the method and calling the objects method....
}
}
}
我的问题是:
我的控制器文件名为home.php,我的类名为Home(首字母大写).所以上面的代码找不到/ Controllers / home类,因为类是/ Controllers / Home
另一方面,如果我从控制器中删除命名空间并调用:
$this->controller = new $this->controllerName;
它工作正常,甚至名字在家….
我的问题:
a)如果我没有涉及名称空间,为什么将主页翻译为Home?
b)如何解决该问题从命名空间调用类而不需要知道它的大写/小写条件?
请不要建议将第一个字母更改为大写,因为我可能有CustomerReceipt,PersonalCashWithdrawl等类.
谢谢你的帮助.