我的自动加载规范如下
"autoload" : {
"psr-4" : {
"MyMVC\\" : "app/"
},
"classmap": [
"app/Controllers",
"app/Helpers"
],
"files": ["app/routes.php"]
},
routes.php 文件的内容是:
<?php
use MyMVC\Core\Route;
$route = new Route;
$route->add('/', 'HomeController@index');
$route->add('about', 'AboutController@index');
$route->add('contact', 'ContactController@index');
现在在我的app/init.php
我正在尝试使用$route
对象但它给了我错误
Notice: Undefined variable: route in /var/www/html/mymvc/app/init.php on line 29
这是我尝试使用的方法$route
object.
/**
* Constructor
* Bootstrap our application based on the configurations provided
*/
public function __construct()
{
// require 'app/routes.php` This will work fine but it should be autoloaded
var_dump($route);
exit;
}
我也运行了命令composer dump-autoload
自动加载在这里不起作用。 PHP 只能自动加载类。您的期望是app/routes.php
将不可能自动加载,因为该文件不包含类声明,并且您无法使用以前未知的类来触发它的执行。
确实,当您包含时,Composer 将执行该文件一次vendor/autoload.php
- 但是,这确实是您的软件的不良行为。不要使用“文件”自动加载来包含配置文件。请注意在库中使用时可能会对性能产生影响。您应该完全避免使用它,它旨在用于无法正常工作的遗留代码。
另一方面,你的架构被破坏了。您不应该编写一个仅通过访问应该在其他地方初始化的变量来“神奇地”了解配置的类。一个好的模式是将配置作为参数传递给构造函数:
public function __construct ($routes)
{
$this->routes = $routes;
}
创建此类的代码部分应该从某处获取配置并将其作为参数传递。这个概念称为控制反转或依赖注入:类不会调用它们需要使用的其他类,它们会请求它们并将它们作为参数获取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)