src/Controller/RecipeController.php line 50
<?phpnamespace App\Controller;use App\Controller\Traits\HreflangsControllerTrait;use App\Controller\Traits\MetatagsControllerTrait;use App\Controller\Traits\StaticPageHelperTrait;use App\Entity\OpenPosition;use App\Entity\Product;use App\Entity\ProductLine;use App\Entity\ProductType;use App\Entity\RecipeType;use App\Form\CustomerServiceType;use App\Form\WorkWithUsType;use App\Repository\ProductRepository;use App\Repository\ProductLineRepository;use App\Repository\OpenPositionRepository;use App\Repository\ProductTypeRepository;use App\Repository\RecipeRepository;use App\Repository\RecipeTypeRepository;use Doctrine\ORM\EntityManagerInterface;use Exception;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Contracts\Translation\TranslatorInterface;use App\Entity\Recipe;class RecipeController extends AbstractController{use MetatagsControllerTrait, HreflangsControllerTrait, StaticPageHelperTrait;private $em;private $transalor;private $request;public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, RequestStack $requestStack){$this->em = $em;$this->transalor = $translator;$this->request = $requestStack->getCurrentRequest();}#[Route(path: [ 'it' => '/ricette','en' => '/en/recipes',// 'es' => '/es/recetas'], name: 'app_recipes')]public function recipeIndex(Request $request, EntityManagerInterface $em){list ($metatags, $hreflangs) = $this->getStaticPageMetatagsAndHreflangs($request, $em, ['it']);$page_n = 1;if ($request->get('page')){$page_n = $request->get('page');}/*** @var RecipeRepository $recipeRepository*/$recipeRepository = $this->em->getRepository(Recipe::class);$recipes = $recipeRepository->findByFilters($page_n, null, null, null, null, null, $request->getLocale());$recipesNumber = $recipeRepository->findAllByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());$pagesNumber = ceil(count($recipesNumber) / 9);$seasonalRecipe = $recipeRepository->findOneBy(['seasonalRecipe' => 1,'isEnabled' => 1,'locale' => $request->getLocale()]);/*** @var ProductRepository $productRepository*/$productRepository = $this->em->getRepository(Product::class);$product = $productRepository->findBy(['isEnabled' => true,'locale' => $request->getLocale()]);$products = [];foreach ($product as $p) {if ($p->getRecipes()->count() > 0) {$products[$p->getId()] = $p->getName();}}/*** @var RecipeTypeRepository $recipeTypeRepository*/$recipeTypeRepository = $this->em->getRepository(RecipeType::class);$recipeTypesTMP = $recipeTypeRepository->findAll();$recipesTypes = [];foreach ($recipeTypesTMP as $r){$recipesTypes[$r->getId()] = $r->getName();}// dump($recipesTypes);die;return $this->render('ricette/recipeIndex.html.twig', [// 'form' => $form->createView(),'recipes' => $recipes,'products' => $products,'recipesTypes' => $recipesTypes,'pages' => $pagesNumber,'seasonalRecipe' => $seasonalRecipe,'metatags' => $metatags,'hreflangs' => $hreflangs]);}#[Route(path: [ '/ricette/api/v1'], name: 'app_recipes_api')]public function recipeApiIndex(Request $request){if ($request->getMethod() == 'POST') {/*** @var RecipeRepository $recipeRepository*/$recipeRepository = $this->em->getRepository(Recipe::class);$recipesNumber = $recipeRepository->findAllByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());$pagesNumber = ceil(count($recipesNumber) / 9);// dd(count($recipesNumber), $pagesNumber);$recipes = $recipeRepository->findByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());$response['html'] = $this->renderView('ricette/_recipeApi.html.twig', ['recipes' => $recipes]);$response['pages'] = $pagesNumber;$response['current_page'] = $request->get('page');return new JsonResponse($response);}}#[Route(path: [ 'it' => '/ricette/{slug}','en' => '/en/recipes/{slug}',// 'es' => '/es/recetas/{slug}'], name: 'app_recipes_detail')]public function recipeDetail(Request $request,string $slug){/*** @var RecipeRepository $recipeRepository*/$recipeRepository = $this->em->getRepository(Recipe::class);$recipe = $recipeRepository->findOneBy(['isEnabled' => true,'slug' => $slug]);if (!$recipe) {return $this->redirectToRoute('app_recipes');}// Ricerca di ricette correlate al prodotto da mostrare nella pagina$recipesRelated = $recipeRepository->findRelated($recipe->getId(), $recipe->getProduct()->getId(), $request->getLocale());// se il prodotto non ha altre ricette correlate allora cerchiamo ricette per categoriaif(!$recipesRelated){$product_type = $recipe->getProduct()->getType();$productsOfType = $product_type->getProducts();foreach($productsOfType as $pof){$recipesRelatedTMP = $recipeRepository->findRelated($recipe->getId(), $pof->getId(), $request->getLocale());foreach($recipesRelatedTMP as $recipesTMP){array_push($recipesRelated, $recipesTMP);}}}$metatags = $this->getMetatags($recipe, 'title', 'method');$hreflangs = $this->getHreflangs($this->em, $recipe);foreach ($hreflangs as $k => $hreflang) {$hreflangs[$k]['href'] = $this->generateUrl('app_recipes_detail', ['_locale' => $k,'slug' => $hreflang['entity']->getSlug()]);}return $this->render('ricette/recipeDetail.html.twig',['recipe' => $recipe,'recipesRelated' => $recipesRelated,'metatags' => $metatags,'hreflangs' => $hreflangs,]);}}