我正在尝试使用composer在wordpress插件中自动加载我的类。
我希望我的模型和控制器驻留在GD命名空间中,但我想将我的模型和控制器放在他们自己的目录中。
我遇到错误消息:致命错误:Class 'GD\ShortcodeController' not found in /.. .../src/GD/App.php on line 10
目录/文件结构
plugins
gd
cache
// location for twig template cache
public
// location for plugin assets
src
controllers
ShortcodeController.php
models
App.php
templates
test.html
vendor
// location for application dependencies installed via composer
composer
autoload_namespaces.php
composer.json
{
"require": {
"twig/twig": "1.*"
},
"autoload": {
"psr-0": {
"GD": ["src/", "src/GD/", "src/GD/controllers/", "src/GD/models/"]
}
}
}
供应商/作曲家/ autoload_namespaces.php
return array(
'Twig_' => array($vendorDir . '/twig/twig/lib'),
'GD' => array($baseDir . '/src', $baseDir . '/src/GD', $baseDir . '/src/GD/controllers', $baseDir . '/src/GD/models'),
);
GD / SRC / App.php
class App
{
private $plugin_dir;
private $twig;
public function init()
{
$shortcodes = new ShortcodeController;
add_shortcode( 'gd', [ $shortcodes , 'gd'] );
}
}
GD / SRC /控制器/ ShortcodeController.php
<?php namespace GD;
class ShortcodeController
{
// STUFF IN HERE
}
我应该使用自动加载类图而不是psr-0吗?使用classmap时,作曲家如何处理命名空间类?
答案 0 :(得分:0)
您的"src/GD/controllers/"
psr-0
"autoload": {
"psr-0": {
"GD": ["src/", "src/GD/", "src/GD/controllers/", "src/GD/models/"]
}
}
但ShortcodeController.php
文件夹和GD/src/controllers
中的namespace
文件是
<?php namespace GD;
class ShortcodeController
{
// STUFF IN HERE
}
因此,您的ShortcodeController.php
应位于src/GD/controllers/gd
文件夹中,但现在路径为GD/src/controllers/ShortcodeController.php
,而Autoloader
正在查看"src/GD/controllers/gd/ShortcodeController.php"
文件夹(包括数组中的其他条目)或者您可以在"src/GD/controllers/"
中将"GD/src/controllers/"
更改为psr-0
。此外,您使用的是来自root / global shortcodes = new ShortcodeController;
的{{1}},因此可能是
namespace
根据
shortcodes = new GD\ShortcodeController;
你的班级
"autoload": {
"psr-0": {"GD\\": "GD/src/controllers/"}
}
应该在<?php namespace GD;
class ShortcodeController
{
// STUFF IN HERE
}
文件夹中。