src/Controller/RecipeController.php line 186
<?php
namespace 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 categoria
if(!$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,
]);
}
}