__construct() and service.yml in Symfony3



>我的代码有一些问题,它有单独的形式、控制器和服务。问题出在哪里?

形式:https://pastebin.com/ERU6hChv 控制器:https://pastebin.com/FMzJ493v 服务:

# app/config/services.yml
services:
app.form.type.przydzial:
class: AppBundleFormPrzydzialType
arguments: ['@session']
tags:
- { name: form.type }

不幸的是,我有一个警告:

"Warning: Missing argument 1 for AppBundleFormPrzydzialType::__construct(), called in G:Xampphtdocsprojectsgodziny_inzvendorsymfonysymfonysrcSymfonyComponentFormFormRegistry.php on line 85 and defined"

堆栈跟踪:

"in srcAppBundleFormPrzydzialType.php at line 64"
return 'appbundle_przydzial';
}
public function __construct($session)
{
$this->session = $session; <----------64 line

编辑:

if i change this line: 
$form = $this->createForm('AppBundleFormPrzydzialType', $przydzial);
to 
$form = $this->createForm('app.form.type.przydzial', $przydzial);

我有不同的警告:

无法加载类型"app.form.type.przydzial">

堆栈跟踪:

in vendor\symfony\symfony\src\Symfony\Component\Form\FormRegistry.php 在第 87 行

if (class_exists($name) && in_array('SymfonyComponentFormFormTypeInterface', class_implements($name))) {
$type = new $name();
} else {
throw new InvalidArgumentException(sprintf('Could not load type "%s"', $name)); <---line 87
}
}

看起来您的表单类型是在 FormRegistry 中使用new创建的,而不是使用您的服务。您可以在 FormRegistry 中找到发生这种情况的确切位置。由于您创建了一个服务并将其标记为form.type因此我只能假设问题出在AppBundleFormPrzydzialType类中的某个地方。

很可能您忘记扩展SymfonyComponentFormAbstractType或意外地从错误的扩展(检查您的使用语句)。

最新更新