目前我开发了一个小型框架,在名称空间方面遇到了一些小问题,当我想加载模型时,尽管使用了名称空间,但页面会在控制器中查找表文件。
我的体系结构:
/app/
/Controllers/
/View/
/Model/
/Table/
/Entity/
/config/
/src/
/Config/
Config.php
/Controller/
Controller.php
/Database/
Database.php
/Network/
Request.php
Application.php
/vendor/
/composer/
autoload.php
composer.json
index.php
下面链接到控制器的页面的代码,我认为问题来了,但不在。。。
composer.json
{
"name": "damien/framework",
"authors": [
{
"name": "Damien aaa",
"email": "email@gmail.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"App\": "src"
}
}
}
PostsController.php(应用程序/控制器)
namespace AppController;
use AppTablePostsTable;
class PostsController extends Controller {
public function index() {
$table = new PostsTable();
}
}
PostsTable.php(应用程序/模型/表格)
namespace AppModelTable;
class PostsTable {
}
Controller.php(src/Controller)
<?php
namespace AppController;
use AppApplication;
use AppNetworkRequest;
class Controller extends Application {
protected $viewPath = ROOT . VIEW;
protected $template = ROOT . TEMPLATE;
protected $layout = "default";
public $request;
public function __construct()
{
$this->request = new Request();
$this->render($this->request->controller().'/'. $this->request->action());
}
/*
* $template String Renvoie le layout demander, si celui-ci existe
*/
public function layout($template) {
if($template != $this->layout) {
require $this->template . $template . '.php';
}
}
/*
* $view string Renvoie la vue correspondant au controller et à la vue demander
* $params string Permet de transmettre des variables à la vue
*/
public function render($view, $params = []) {
extract($params, EXTR_OVERWRITE);
ob_start();
if($view != null) {
require $this->viewPath . '/' . str_replace('.', '/', $view) . '.php';
} else {
require $this->viewPath . '/' . $this->request->controller() . '/' . $this->request->action() . '.php';
}
$content = ob_get_clean();
require $this->template .$this->layout . '.php';
}
}
在上面的这些代码中,当我创建一个新的PostsTable时,我从控制器调用TablePosts,error。
(!)致命错误:未捕获错误:在D:\Sites\Dev\Framework\app\Controller\PostsController.php第10行找不到类"Table\PostsTable">
您的composer配置似乎是错误的。
以下行定义文件夹src:"App\": "src"
中的命名空间App
将其更改为:"App\": "app"
并更新composer
编辑:您还为模型使用了错误的名称空间:
use AppTablePostsTable;
以及以后:PostsTable.php(应用程序/型号/表格)