Silex和自动加载控制器类

时间:2015-08-08 23:57:41

标签: php composer-php silex psr-4

我遇到了将类自动加载工作在我正在组装的Silex骨架中的问题。我在另一个项目中工作,但我无法弄清楚我在这里做错了什么。 我的目录如下所示:

root
 -src
    -Controller
       -HelloController.php
    -app.php
 -vendor
 -web
   -index.php
 -composer.json

这是我的index.php

<?php
$app = require __DIR__.'/../src/app.php';
$app->run();

app.php

<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->get("/hello/{name}", 'App\Controller\HelloController::hello');
return $app;

HelloController.php

<?php

namespace App\Controller;

use Silex\Application;
use Symfony\Component\HttpFoundation\Response;

class HelloController
{
    public function hello($name)
    {
        return new Response('<html><head></head><body><h1>Hello, '.$name.'</h1></body></html>');
    }
}

和composer.json

{
    "require": {
        "silex/silex": "^1.3"
    },
    "autoload": {
      "psr-4": {
        "App\\": "/src"
      }
    }
}

每当我尝试在浏览器中打开index.php / hello / world时,我都会收到此错误:

InvalidArgumentException in ControllerResolver.php line 153: 
Class "App\Controller\HelloController" does not exist

2 个答案:

答案 0 :(得分:4)

您的psr-4无效。在'/src'

之前添加一个点
"App\\": "./src"

或将斜线移到最后

"App\\": "src/"

或者只删除斜杠。路径必须是相对的。

答案 1 :(得分:-1)

在composer.json中更改

"App\\": "/src"

"App\\": "src"

你可以找到 SilexSkeleton,控制器为php类 GitHub上的示例:https://github.com/jaresz/SilexSkeleton