我需要为 Symfony 6.1 配置自动装配

问题描述 投票:0回答:1

我有这个代码,但找不到解决方案。 无法自动装配“App\Controller\RecipeController::edit()”的参数 $recipe:它引用类“App\Entity\Recipe”,但不存在此类服务。

这是代码:


<?php

namespace App\Controller;

use App\Entity\Recipe;
use App\Form\RecipeType;
use App\Repository\RecipeRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;



class RecipeController extends AbstractController
{
    #[Route('/recettes', name: 'recipe.index')]
    public function index(Request $request , RecipeRepository $repository, EntityManagerInterface $em ): Response
    {
       $recipes = $repository->findAll();
       //$recipes = $repository->findWithDurationLowerThan(5);
       // pour cree une recette directement dans la base de donnee
       $recipe = new Recipe();

       $recipe->setTitle('Barbe à Papa')
              ->setSlug('barbe-papa')
              ->setContent('Il est indispensable pour faire de la barbe à papa de disposer dune machine speciale, qui peut se louer a la journée chez les spécialistes de locations de matériels divers bien connus, ou en faisant une recherche internet.')
              ->setDuration(5)
              ->setCreatedAt(new \DateTimeImmutable())
              ->setUpdatedAt(new \DateTimeImmutable());
          
       $em->persist($recipe);
       $em->flush();

       //si je veux supprimer une recette dans la base de donnee alors : $em->remove($recipes[0]) puis $em->flush()
        return $this->render('recipe/index.html.twig',[
            'recipes' => $recipes
        ]);
    }

    #[Route('/recettes/{slug}-{id}', name:'recipe.show' , requirements:['id'=>'\d+' , 'slug'=> '[a-z0-9-]+'])]

    public function show(Request $request , string $slug , int $id , RecipeRepository $repository): Response
    {

       $recipe = $repository->find($id); // je peux aussi chercher par le slug avec findOneBy(['slug' => $slug])
       if ($recipe->getSlug() != $slug) {
        return $this->redirectToRoute('recipe.show', ['slug'=> $recipe->getSlug(), 'id' => $recipe->getId()]);
       }
      
        return $this->render('recipe/show.html.twig', [
           'recipe' =>$recipe
        ]);
        
    }

    #[Route('/recettes/{id}/edit' , name: 'recipe.edit') ]

    public function edit(Recipe $recipe)
    { 

        $form = $this-> createForm(RecipeType::class, $recipe);
         
       return $this->render( 'recipe/edit.html.twig' , [
         'recipe'=> $recipe,
         'form' => $form
       ]);
    }
}

模板:

type {% extends 'base.html.twig' %}

{% block title "Recette : " ~ recipe.title %}



{% block body %}

<h1>{{recipe.title}}</h1>

    {{ form(form) }}

{% endblock %}

我删除了composer.json中的symfony\ux-turbo,但没有任何变化。stackoverflow中没有任何变化。对不起,因为我真的是初学者

symfony service autowired
1个回答
0
投票

请确保您的实体未在配置中自动连接(排除):

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\:
        resource: '../../src/App'
        exclude: '../../src/App/{Entity}' # it's important to exclude
© www.soinside.com 2019 - 2024. All rights reserved.