我正在使用MVC PHP框架和Torophp进行路由
这是我的public / index.php
<?php
class HomeController {
function get() {
echo "hello world";
}
}
require_once __DIR__ . '/../vendor/autoload.php';
ToroHook::add("404", function() {
echo "404 - Not Found";
});
Toro::serve(array(
"/" => "HomeController";
));
?>
但如果我从index.php注释掉类HomeController并在app / controllers / HomeController.php中声明它
<?php
class HomeController {
function get() {
echo "hello world";
}
}
这是我的composer.json文件
{
"name": "namespace/app",
"description": "This is just sample",
"require": {
"torophp/torophp": "dev-master",
"twig/twig": "2.0"
},
"authors": [
{
"name": "ABC",
"email": "abc@xyz.com"
}
],
"autoload":{
"psr-4":{
"Links\\Controllers\\":"app/controllers",
"Links\\Models\\":"app/models"
}
}
}
答案 0 :(得分:0)
Composer会根据您放入composer.json
的{{3}}部分生成自动加载器:
"autoload":{
"psr-4":{
"Links\\Controllers\\":"app/controllers",
"Links\\Models\\":"app/models"
}
}
它表示命名空间Links\Controllers
中的类可以在与.php
目录中的类(和app/controllers
终止符)同名的文件中找到。类似于名称空间Links\Models
。
主要剧本:
Toro::serve(array(
"/" => "HomeController";
));
告诉路由器使用HomeController
类来处理/
的请求。
顺便说一下,在;
之后的分号("HomeController" is a syntax error; the code doesn't even start because it doesn't compile. There should be a comma (
),`),而不是分号。
由于尚未声明HomeController
类,因此调用自动加载器来查找它并失败,因为它没有关于从全局命名空间中查找类的位置的信息。
您已将HomeController
类放在app/controllers/HomeController.php
文件中,但这还不够。当解释器需要使用类Link\Controllers\HomeController
并且此类尚未声明时,自动加载器会读取此文件。
app/controllers/HomeController.php
不会发生这种情况。此文件声明未放置在任何名称空间中的类HomeController
,因此它属于全局名称空间。为了将它放入Links\Controllers
命名空间,您必须将此声明行放在app/controllers/HomeController.php
中的任何其他语句之前:
namespace Links\Controllers;
现在,您的班级名称为Links\Controllers\HomeController
。将使用它的代码更改为:
Toro::serve(array(
'/' => 'Links\Controllers\HomeController',
));
它应该有用。