routes.php文件
use MyMVC\Core\Route;
$route = new Route;
$route->add('/', 'HomeController@index');
$route->add('about', 'AboutController@index');
$route->add('contact', 'ContactController@index');
的index.php
<?php
/**
* Define Constants
*/
define('BASE_PATH', dirname(realpath(__FILE__)));
define('APP_PATH', BASE_PATH . "/app");
/**
* Including the Composer's autoloader
*/
require_once 'vendor/autoload.php';
/**
* Load the routes declarations
*/
require_once 'app/routes.php';
/**
* Bootstrap our application
*/
require_once 'app/init.php';
/**
* Initialize our beautiful framework
*/
$application = new \MyMVC\Application($route);
composer.json
"autoload" : {
"psr-4" : {
"MyMVC\\" : "app/"
},
"classmap": [
"app/Controllers",
"app/Helpers"
],
"files": ['app/routes.php'] // already removed this line
},
使用require_once
时,它会提供undefined variable route error
,而如果我只使用require
则会显示路由对象。
为什么会这样?
答案 0 :(得分:1)
所有症状都表明app / routes.php&#39;被包含在其他地方之前。由于它定义了一个变量,如果这样的包含不会发生在全局范围内,那么该变量将在任何地方被调用。
除了使用像Xdebug这样的专用调试器之外,您还可以使用内置工具来诊断问题。例如,您有http://www.spoj.com/problems/PRIME1/来获取给定点中包含的文件的列表。您还可以在&#39; app / routes.php&#39;之上添加get_included_files()。找出它的来源。
关于更新问题和后续评论的注意事项:如果您尝试自动加载文件并自动加载文件,我会说你&#39;我刚回答了你自己的问题。但值得注意的是,自动加载旨在用于函数和类定义。你有一个定义变量的任意代码片段,而且你只是学习 - 因为变量在自动加载器方法中变为局部变量,所以它没有多大用处。
答案 1 :(得分:1)
仅当文件已从其他文件加载时才会发生此类错误。这就是为什么它不再加载它而你没有获得$ route对象的实例。
E.g,
让我们说吧 file1.php 包含 routes.php
现在,如果您使用:
需要'routes.php'(它会再次加载相同的文件,即使已经加载)
requier_once'rouctions.php'(如果已经加载,它将不加载文件,因为你没有得到$ route变量的实例,这意味着它正在发生)