gpt4 book ai didi

php - 在服务器上找不到 Silex 'App\Controller\IndexController'

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:12 25 4
gpt4 key购买 nike

我的 silex 项目在本地运行,但是当我把它放到网上时,我遇到了 NameSpace 或 Class 解析问题:

Fatal error: Class 'App\Controller\IndexController' not found in /homepages/40/d453499750/htdocs/myfolder/app/bootstrap.php on line 19

结构:

/  
->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。我做错了什么?

最佳答案

@Maerlyn "You have folders app and controller, not App and Controller like in your namespace."

这让我走上了正确的道路!

我用第一个字母大写重命名了我的文件夹并且成功了。但我想到了使用大写命名空间和小写目录名的 Silex 供应商......

解决方案在 composer.json 中,更准确地说在 autoload 参数中。

使用此功能,您可以映射您的命名空间和文件夹:

 "autoload": {
"psr-4": {
"App\\Controller\\": "./app/controller"
}
},

在这里您可以找到更多信息:
https://getcomposer.org/doc/01-basic-usage.md#autoloading

你可以在 vendor => composer => autoload_psr4 文件中找到生成的代码

return array(
...
'App\\Controller\\' => array($baseDir . '/app/controller'),
);

有了这个,我可以保留小写文件夹(作为 silex 默认值)和大写命名空间。

关于php - 在服务器上找不到 Silex 'App\Controller\IndexController',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com