我正在 Sylius 框架中用 PHP 编写一个 Web 应用程序。我创建了一个继承自框架内置
ResourceController
类的新类:
class ResourceController extends \Sylius\Bundle\ResourceBundle\Controller\ResourceController
类 \Sylius\Bundle\...\ResourceController 有一个构造函数方法,其中有 17 个参数。在继承该类的类中,我需要向构造函数添加三个参数。所以我的代码如下所示:
public Sender $sender;
public ChannelContextInterface $channelContext;
public LocaleContextInterface $localeContext;
public function __construct(MetadataInterface $metadata, RequestConfigurationFactoryInterface $requestConfigurationFactory, ?ViewHandlerInterface $viewHandler, RepositoryInterface $repository, FactoryInterface $factory, NewResourceFactoryInterface $newResourceFactory, ObjectManager $manager, SingleResourceProviderInterface $singleResourceProvider, ResourcesCollectionProviderInterface $resourcesFinder, ResourceFormFactoryInterface $resourceFormFactory, RedirectHandlerInterface $redirectHandler, FlashHelperInterface $flashHelper, AuthorizationCheckerInterface $authorizationChecker, EventDispatcherInterface $eventDispatcher, ?StateMachineInterface $stateMachine, ResourceUpdateHandlerInterface $resourceUpdateHandler, ResourceDeleteHandlerInterface $resourceDeleteHandler, Sender $sender, ChannelContextInterface $channelContext, LocaleContextInterface $localeContext)
{
parent::__construct($metadata, $requestConfigurationFactory, $viewHandler, $repository, $factory, $newResourceFactory, $manager, $singleResourceProvider, $resourcesFinder, $resourceFormFactory, $redirectHandler, $flashHelper, $authorizationChecker, $eventDispatcher, $stateMachine, $resourceUpdateHandler, $resourceDeleteHandler);
$this->sender = $sender;
$this->channelContext = $channelContext;
$this->localeContext = $localeContext;
}
启动应用程序后,我收到了(Symfony)错误,即使理论上我没有跳过任何内容(尽管我可能是错的)
函数 App\Controller\Resource\ResourceController::__construct() 的参数太少,第 31 行的 [...] 中传入了 17 个参数,而预期的参数正好是 20 个
_sylius.yaml 文件片段:
sylius_customer:
resources:
customer:
classes:
model: App\Entity\Customer\Customer
repository: App\Repository\CustomerRepository
controller: App\Controller\Resource\ResourceController
还有 config/routes.yaml 文件:
sylius_admin_customer_create:
path: /admin/customers/new
methods: [GET,POST]
defaults:
_controller: sylius.controller.customer::createAction
我做错了什么?
无需重新定义控制器
__construct
方法,您可以将所需的服务直接注入控制器操作方法。例如:
public function someAction(
Sender $sender,
ChannelContextInterface $channelContext,
LocaleContextInterface $localeContext
) {
// method logic that uses services
}
在这种情况下,您:
services.yaml
文件有关在 Symfony 控制器方法中注入服务的更多信息可以在 Symfony 文档中找到。