当我提交表格时,出现此错误:
无法自动装配“ App \ Controller \ AdController :: create()”的参数$ manager:它引用接口“ Doctrine \ Common \ Persistence \ ObjectManager”,但不存在这样的服务。您可能应该将此接口别名为现有的“ doctrine.orm.default_entity_manager”服务。
这是在AdController.php中创建的函数中:
<?php
namespace App\Form;
use App\Entity\Ad;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class AdType extends AbstractType
{
/**
* @param string $label
* @param string $placeholder
* @return array
*/
private function getConfiguration($label, $placeholder){
return [
'label' => $label,
'attr' => [
'placeholder' => $placeholder
]
];
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class, $this->getConfiguration("titre", "tapez un super titre pour votre annonce"))
->add('slug', TextType::class, $this->getConfiguration("Adresse web", "tapez l'adresse web (automatique)"))
->add('coverImage', UrlType::class, $this->getConfiguration("Url de l'image principal", "Donnez l'adresse d'une image qui donne vraiment envie"))
->add('introduction', TextType::class, $this->getConfiguration("introduction", "donnez une description global de l'annonce"))
->add('content', TextareaType::class, $this->getConfiguration("Description detaille", "tapez une description qui donne vraiment envie de venir chez vous !"))
->add('price', MoneyType::class, $this->getConfiguration("Prix par nuit", "indiquez le prix que voulez pour une nuit"))
->add('rooms', IntegerType::class, $this->getConfiguration("Nombre de chambre", "le nom de chambres disponibles"))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Ad::class,
]);
}
这是我的AdType.php:
def myfunc_1():
my_file = open("ex1_sample_data.txt", "r")
my_list = []
for i in my_file:
my_list.append(i)
return my_list
print(myfunc_1())
def myfunc_2():
file = open("ex1_sample_data.txt", "r")
for string_line in file:
string_line = string_line.strip()
my_tuple = myfunc_1(string_line)
my_list.append(my_tuple)
return my_list
print(myfunc_2())
}
为什么我提交表单时会收到此错误?如何解决此问题
提前谢谢
答案 0 :(得分:1)
该错误实际上表明您应该将该类别名为现有服务。当Symfony不知道您要使用哪种接口实现时,就会发生这种情况。
尝试这样的事情:
Doctrine\Common\Persistence\ObjectManager: '@doctrine.orm.default_entity_manager'
将其添加到services.yml中,然后尝试。
docs:https://symfony.com/doc/current/service_container/autowiring.html#using-aliases-to-enable-autowiring
答案 1 :(得分:1)
您应该避免直接使用该服务。始终使用合同代替。 它适用于所有服务
因此,不要直接使用package Testmavenproject.Project;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Testing {
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver","/Project/Driver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.qr-code-generator.com/");
}
}
,而要使用ObjectManager
答案 2 :(得分:0)
尝试一下:
use Doctrine\ORM\EntityManagerInterface;
class Someclass {
protected $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
public function somefunction() {
$em = $this->em;
...
}
}
答案 3 :(得分:0)
使用ManagerRegistry
服务而不是ObjectManager
/**
* @Route("/ads/new", name="ads_create")
*
* @return Response
*/
public function create(Request $request, ManagerRegistry $managerRegistry){
$ad = new Ad();
$form = $this->createForm(AdType::class, $ad);
$form->handleRequest($request);//symfony va faire le lien entre les donne des champs fu formulaire et la variable $ad
if($form->isSubmitted() && $form->isValid() ){
$em = $managerRegistry->getManager();
$em->persist($ad);
$em->flush();
}
return $this->render("ad/new.html.twig", [
'form' => $form->createView()
]);
}
答案 4 :(得分:0)
您必须更改此用法:
use Doctrine\Common\Persistence\ObjectManager;
为此用途:
use Doctrine\Persistence\ObjectManager;
答案 5 :(得分:0)
尝试改变这个
$manager->persist($ad);
$manager->flush();
为此
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
答案 6 :(得分:0)
尝试使用 EntityManagerInterface
而不是 ObjectManager
。
答案 7 :(得分:-1)
你必须改变这个:
$manager->persist($ad);
$manager->flush();
为此:
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();