gpt4 book ai didi

php - Silex 中的自定义 BaseController

转载 作者:可可西里 更新时间:2023-10-31 23:03:23 27 4
gpt4 key购买 nike

我已经在 Silex 1.3.4 中创建了一个简单的应用程序,我想要一个基本 Controller ,它有一个接受 $app 和 $request 的 __construct 方法。所有继承的 Controller 都应该有各自的构造函数并调用父 Controller 的构造方法。

//Use statements here....

class AppController
{
public function __construct(Application $app, Request $request){
$this->app = $app;
$this->request = $request;
}
}

继承 Controller 可以这样写:

//Use statements here....

class ItemsController extends AppController
{
public function __construct(Application $app, Request $request){
parent::__construct($app, $request);
}

public function listAction()
{
//code here without having to pass the application and request objects
}
}

我决定的路由方式如下图所示:

   $app->post(
'/items/list', 'MySilexTestDrive\Controller\ItemsController::listAction'
)->bind('list');

我正在考虑使用调度程序并覆盖那里的一些进程并以我自己的方式创建我的 Controller 实例,但我完全不知道如何以及这是否是一个好主意。

有谁做过类似的事情吗?请帮忙。

最佳答案

您可以使用 ServiceControllerServiceProvider将您的 Controller 定义为应用程序中的服务。但是您不能以那种方式注入(inject) Request。顺便说一句,您可以有多个请求,如果您执行子请求,请求实例可以更改。您可以改为注入(inject) RequestStack,然后在需要获取当前请求时调用 $requestStack->getCurrentRequest()

$app = new Silex\Application();

abstract class AppController
{
protected $app;
protected $requestStack;

public function __construct(Silex\Application $app, Symfony\Component\HttpFoundation\RequestStack $requestStack)
{
$this->app = $app;
$this->requestStack = $requestStack;
}

public function getRequest()
{
return $this->requestStack->getCurrentRequest();
}
}

class ItemsController extends AppController
{
public function listAction()
{
$request = $this->getRequest();
// ...
}
}

$app->register(new Silex\Provider\ServiceControllerServiceProvider());

$app['items.controller'] = $app->share(function() use ($app) {
return new ItemsController($app, $app['request_stack']);
});

$app->get('/items/list', "items.controller:listAction");

做这样的事情有意义吗? 我不这么认为。特别是如果框架通过类型提示为您提供请求实例。就这样

public function listAction(Application $app, Request $request)
{
// ...
}

并与之合作。

关于php - Silex 中的自定义 BaseController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868466/

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