我尝试了 Silex 中的示例并将我的控制器放在单独的目录和类中。
默认情况下,控制器方法不会获取Request
和Application
传递的对象。这适用于我的开发机器,它有 5.3.14,但不适用于默认的 Ubuntu 5.3.2。它给了我:
PHP Catchable 致命错误:传递给 Sv\Controller\Index::index() 的参数 1 必须是 Symfony\Component\HttpFoundation\Request 的实例,没有给出,在第 23 行的 /site/include/app/bootstrap.php 中调用并在第 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 的问题......