PHP 5.3.2的Silex问题?

时间:2013-04-10 16:11:11

标签: php silex

我尝试了Silex中的示例,并将我的控制器放在一个单独的目录和类中。

默认情况下,控制器方法不会传递RequestApplication个对象。这适用于我的开发机器,它有5.3.14但不是默认的Ubuntu 5.3.2。它给了我:

  

PHP Catchable致命错误:传递给Sv \ Controller \ Index :: index()的参数1必须是Symfony \ Component \ HttpFoundation \ Request的实例,没有给出,在/site/include/app/bootstrap.php中调用在第23行并在第46行的/site/include/app/Sv/Controller/Index.php中定义

这是我的引导程序PHP:

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use Sv\Repository\PostRepository;
use Sv\Controller;

$app = new Silex\Application();

// define global service for db access
$app['posts.repository'] = $app->share( function () {
    return new Sv\Repository\PostRepository;
});

// register controller as a service
$app->register(new Silex\Provider\ServiceControllerServiceProvider());
$app['default.controller'] = $app->share(function () use ($app) {
    return new Controller\Index();
});
$app['service.controller'] = $app->share(function () use ($app) {
    return new Controller\Service($app['posts.repository']);
});

// define routes
$app->get('/', 'default.controller:index');
$app->get('/next', 'default.controller:next');

$service = $app['controllers_factory'];
$service->get('/', "service.controller:indexJsonAction");
// mount routes
$app->mount('/service', $service);

// definitions
$app->run();

这是控制器代码:

namespace Sv\Controller;

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

class Index
{
    public function index(Request $request, Application $app)
    {
        return 'Route /index reached';
    }

    public function next(Request $request, Application $app)
    {
        return 'Route /next reached';
    }
}

为什么这不起作用?

我希望这不是阻止我在PHP 5.3.2下使用ZF2的问题......

1 个答案:

答案 0 :(得分:6)

Silex需要PHP 5.3.3,正如您在their composer.json中所看到的那样:

"require": {
    "php": ">=5.3.3",
    ...

它还在README file中说明了

  

Silex适用于PHP 5.3.3或更高版本。

这是因为Symfony2不再支持PHP 5.3.2。