未找到torophp类

时间:2018-05-17 11:51:08

标签: php url-routing autoload

我正在使用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";

));

?>
当我搜索hhtp://example.com/它工作正常并显示你好世界

但如果我从index.php注释掉类HomeController并在app / controllers / HomeController.php中声明它

<?php

class HomeController {
    function get() {
        echo "hello world";
    }
}
它不起作用它显示类未找到或错误400内部服务器错误。

这是我的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"
		}
	}
}

1 个答案:

答案 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',
));

它应该有用。