【发布时间】:2015-09-18 21:00:03
【问题描述】:
我的 silex 项目在本地工作,但是当我把它放到网上时,我遇到了 NameSpace 或 Class 解析问题:
致命错误:在第 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 中重写了Base。我做错了什么?
【问题讨论】:
-
您的命名空间中有
app和controller文件夹,而不是App和Controller。 -
我已经考虑过了,但我不确定这是命名空间和文件夹名称之间的链接
-
您使用的是什么操作系统?在linux上,文件系统是区分大小写的,因此app和App是不同的目录。
-
你的 RewriteBase 是错误的,rewritebase 是相对于 URI 而不是文件系统(好吧,也是文件系统,但取决于你的 webroot 文件夹)。 Take a look at this。 PS:确保您的 webroot 是 web 文件夹,而不是 myfolder 文件夹,否则您将可以从任何地方直接访问所有项目文件
-
是的,如果您的 webroot 是 myfolder 文件夹,那么您肯定需要一个 htaccess 来禁止访问所有非公共文件夹。