我的silex项目适用于本地,但是当我把它放到网上时,我有一个NameSpace或类解析问题:
致命错误:在第19行的/homepages/40/d453499750/htdocs/myfolder/app/bootstrap.php中找不到类'App \ Controller \ IndexController'
结构:
/
->myfolder
->app
->controller
->IndexController.php
->bootstrap.php
->...
->vendor
->web
->.htaccess
-> index.php
-> ...
composer.json
{
"minimum-stability":"dev",
"autoload": { "psr-0": { "App\\": "./" }},
"require":{
"silex/silex": "~1.2",
"symfony/twig-bridge":"2.1.*",
"twig/twig":">=1.8,<2.0-dev"
}
}
.htaccess
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /myfolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ web/index.php [QSA,L]
</IfModule>
boostrap.php
<?php
use App\Controller\IndexController;
use Silex\Provider\TwigServiceProvider;
use Silex\Provider\UrlGeneratorServiceProvider;
use Silex\Provider;
/* load vendors */
$loader = require_once __DIR__ . '/../vendor/autoload.php';
$app = new Silex\Application();
/* unable path() and url() */
$app->register(new UrlGeneratorServiceProvider());
/* twig */
$app->register(new TwigServiceProvider());
/* load the controllers*/
$loader->add("App",dirname(__DIR__));
$app->mount("/", new IndexController());
return $app;
IndexController.php
namespace App\Controller {
use Silex\Application;
use Silex\ControllerProviderInterface;
class IndexController implements ControllerProviderInterface
{
...
我的silex在一个文件夹中,但我在.htaccess中重写了基础。我做错了什么?
答案 0 :(得分:4)
@Maerlyn&#34;您有文件夹应用程序和控制器,而不是名称空间中的应用程序和控制器。&#34;
这使我走上正轨!
我已用首字母大写重命名我的文件夹,但它已经完成了。但是我想到了Silex供应商,他正在使用大写命名空间和小写dirnames ...
解决方案在 composer.json 中,更准确地说在 autoload 参数中。
借助此功能,您可以映射您的命名空间和文件夹:
"autoload": {
"psr-4": {
"App\\Controller\\": "./app/controller"
}
},
您可以在此处找到更多信息:
https://getcomposer.org/doc/01-basic-usage.md#autoloading
您可以在vendor =&gt;中找到生成的代码composer =&gt; autoload_psr4文件
return array(
...
'App\\Controller\\' => array($baseDir . '/app/controller'),
);
有了这个,我可以保留小写文件夹(默认为silex)和大写名称空间。