找不到自定义 ControllerProvider Class
Custom ControllerProvider Class not found
我有一个自定义控制器提供程序 class,它工作正常。我试过添加第二个,它一直在说:
Fatal error: Class 'Bar\BarControllerProvider' not found in C:\xampp\htdocs\foobar\src\app.php on line 18
我已经按照与第一个相同的方式设置了它,
namespace Bar;
...
class BarControllerProvider implements ControllerProviderInterface {
public function connect(Application $app) {
...
$controllers = $app['controllers_factory'];
$controllers->get('/', function () use ($app) {
...
});
...
return $controllers;
}
}
以及在 composer 中设置的自动加载器:
{
"require": {
"silex/silex": "~1.3",
"doctrine/dbal": "~2.2",
"symfony/security": "^3.0"
},
"autoload" : {
"psr-0": {
"Foo": "/src/Foo",
"Bar": "/src/Bar"
}
}
}
文件目录如下所示:
-config (bunch of stuff in here)
-src
|-Foo
| |-FooControllerProvider.php
|-Bar
| |-BarControllerProvider.php
|-app.php
-vendor (bunch of stuff in here)
-web (bunch of stuff in here)
-composer.json
-composer.lock
app.php 有这些:
$app->mount("/foos", new Foo\FooControllerProvider());
$app->mount("/bars", new Bar\BarControllerProvider());
实际上我已经删除了整个 vendor 文件夹并重新安装了 composer,但没有任何区别。
如果我注释掉 bars mount,foos 会正常工作。为什么找不到 BarControllerProvider?
我认为您不需要为同一文件夹定义不同的映射,我建议您使用 PSR-4 自动加载而不是 PSR-0 自动加载,如文档中 here 所述:
PSR-4 is the recommended way though since it offers greater ease of
use (no need to regenerate the autoloader when you add classes).
只需尝试将 src 文件夹映射如下:
{
"autoload": {
"psr-4": { "": "src/" }
}
}
希望对您有所帮助
我有一个自定义控制器提供程序 class,它工作正常。我试过添加第二个,它一直在说:
Fatal error: Class 'Bar\BarControllerProvider' not found in C:\xampp\htdocs\foobar\src\app.php on line 18
我已经按照与第一个相同的方式设置了它,
namespace Bar;
...
class BarControllerProvider implements ControllerProviderInterface {
public function connect(Application $app) {
...
$controllers = $app['controllers_factory'];
$controllers->get('/', function () use ($app) {
...
});
...
return $controllers;
}
}
以及在 composer 中设置的自动加载器:
{
"require": {
"silex/silex": "~1.3",
"doctrine/dbal": "~2.2",
"symfony/security": "^3.0"
},
"autoload" : {
"psr-0": {
"Foo": "/src/Foo",
"Bar": "/src/Bar"
}
}
}
文件目录如下所示:
-config (bunch of stuff in here)
-src
|-Foo
| |-FooControllerProvider.php
|-Bar
| |-BarControllerProvider.php
|-app.php
-vendor (bunch of stuff in here)
-web (bunch of stuff in here)
-composer.json
-composer.lock
app.php 有这些:
$app->mount("/foos", new Foo\FooControllerProvider());
$app->mount("/bars", new Bar\BarControllerProvider());
实际上我已经删除了整个 vendor 文件夹并重新安装了 composer,但没有任何区别。
如果我注释掉 bars mount,foos 会正常工作。为什么找不到 BarControllerProvider?
我认为您不需要为同一文件夹定义不同的映射,我建议您使用 PSR-4 自动加载而不是 PSR-0 自动加载,如文档中 here 所述:
PSR-4 is the recommended way though since it offers greater ease of use (no need to regenerate the autoloader when you add classes).
只需尝试将 src 文件夹映射如下:
{
"autoload": {
"psr-4": { "": "src/" }
}
}
希望对您有所帮助