Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all 1542 articles
Browse latest View live

Modifier contenu texte site multilingue via l'admin du site

$
0
0

Bonjour,

Je suis débutant avec Symfony et je suis actuellement la "formation Symfony par l'exemple" (qui est très bien faite au passage !), et j'aimerais créer une administration sur mon site multilingue, où je peux modifier le texte présent sur chaque page et dans les différentes langues disponible, et non pas via la toolbar du mode dev de Symfony.
Je n'ai pas encore commencé le développement du site, mais je me pose les questions en amont pour savoir s'il serait préférable de passer par Symfony ou Wordpress pour ce détail par exemple.

Donc je m'en remets à vos connaissances ! Connaissez-vous des tutos ou avez-vous des idées qui permettrait de créer une admin dans ce genre avec Symfony 4 ?

Merci d'avance pour vos réponses !


Symfony 5 : Column 'image_name' cannot be null

$
0
0

Bonjour,

Je ne comprends pas d'où vient cette erreur alors je m'adresse à vous.

J'ai suivi la doc de Vich Uploader comme il se doit et j'ai ce message d'erreur lors de l'upload d'image :

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'image_name' cannot be null

Le nom de l'image n'est pas sauvegardé, et je ne comprends pas pourquoi !

Voici mon code :

vich_uploader.yaml

vich_uploader:
    db_driver: orm

    mappings:
       news_image:
           uri_prefix: /img/uploads/news
           upload_destination: '%kernel.project_dir%/public/img/uploads/news'
           namer: Vich\UploaderBundle\Naming\SmartUniqueNamer

           delete_on_update: true
           delete_on_remove: true

News.php :

<?php

namespace App\Entity;

use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @ORM\Entity(repositoryClass="App\Repository\NewsRepository")
 * @Vich\Uploadable
 */
class News
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $title;

    /**
     * @ORM\Column(type="text")
     */
    private $content;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="news")
     * @ORM\JoinColumn(nullable=false)
     */
    private $author;

    /**
     * @ORM\Column(type="string")
     */
    private $imageName;

    /**
     * @Vich\UploadableField(mapping="news_image", fileNameProperty="imageName")
     */
    private $imageFile;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $featured;

    /**
     * @ORM\Column(type="datetime")
     */
    private $createdAt;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $updatedAt;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function getContent(): ?string
    {
        return $this->content;
    }

    public function setContent(string $content): self
    {
        $this->content = $content;

        return $this;
    }

    public function getAuthor(): ?User
    {
        return $this->author;
    }

    public function setAuthor(?User $author): self
    {
        $this->author = $author;

        return $this;
    }

    public function setImageName(?string $imageName): void
    {
        $this->imageName = $imageName;
    }

    public function getImageName(): ?string
    {
        return $this->imageName;
    }

    public function getImageFile(): ?File
    {
        return $this->imageFile;
    }

    public function setImageFile(?File $imageFile = null): self
    {
        $this->imageFile = $imageFile;

        if ($this->imageFile instanceof UploadedFile) {
            $this->updatedAt = new DateTime('now');
        }

        return $this;
    }

    public function getFeatured(): ?string
    {
        return $this->featured;
    }

    public function setFeatured(string $featured): self
    {
        $this->featured = $featured;

        return $this;
    }

    public function getCreatedAt(): ?\DateTimeInterface
    {
        return $this->createdAt;
    }

    public function setCreatedAt(\DateTimeInterface $createdAt): self
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    public function getUpdatedAt(): ?\DateTimeInterface
    {
        return $this->updatedAt;
    }

    public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }
}

NewsType.php :

<?php

namespace App\Form;

use App\Entity\News;
use Symfony\Component\Form\AbstractType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;

class NewsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', TextType::class, [
                'label' => 'Titre *',
            ])
            ->add('content', CKEditorType::class, [
                'label' => 'Contenu *',
                'attr' => ['rows' => '8'],
            ])
            ->add('imageFile', FileType::class, [
                'label' => 'Ajouter une image *',
                'attr' => ['lang' => 'fr'],
                'required' => true
            ])
            ->add('featured', ChoiceType::class, [
                'label' => 'A la Une *',
                'choices' => ['Oui' => 'oui', 'Non' => 'non'],
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => News::class,
        ]);
    }
}

AdminNewsController.php :

/**
     * @Route("/admin/news/create", name="create_news")
     */
    public function create(Request $request, EntityManagerInterface $em)
    {
        $news = new News();
        $form = $this->createForm(NewsType::class, $news);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $news->setAuthor($this->getUser());
            $news->setCreatedAt(new DateTime('now'));
            $em->persist($news);
            $em->flush();

            return $this->redirectToRoute('admin_news');
        }

        return $this->render('admin_news/create.html.twig', [
            'form' => $form->createView()

create.html.twig :

{% block body %}
    {{ form_start(form) }}
        {{ form_widget(form) }}
        <input class="btn btn-primary text-uppercase" type="submit" value="Ajouter">
    {{ form_end(form) }}
{% endblock %}

Merci pour votre aide !

API-Platform Opération personnalisée

$
0
0

Bonjour !

J'utilise API Platform depuis quelques jours maintenant (moins d'un mois). Et je veux savoir comment l'on peut créer une opération personnalisée comme à l'ancienne avec Symfony :

API-Platform Groupe de sérialisation ne fonctionne pas correctement

$
0
0

Bonjour,

J'ai une API faite avec Symfony 5 et je m'aide avec API Platform pour aller plus vite. Je rencontre cependant un problème très étrange. Lorque j'ajoute des groupes de sérialisation ou de désérialisation à mes ressources et que je tente de récupérer une collection ou même une item, tous les champs ne remontent pas

Ma ressource

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ApiResource(
 *  attributes={"security"="is_granted('ROLE_USER')"},
 *  normalizationContext={
 *      "groups"={"pelerins_read"}
 *  },
 *  collectionOperations={
 *      "get"={"security"="is_granted('ROLE_INSCRIPTION') or is_granted('ROLE_ENCADREUR')", "security_message"="Vous n'êtes autorisés à consulter cette ressource"},
 *      "post"={"security"="is_granted('ROLE_INSCRIPTION')", "security_message"="Vous n'êtes autorisés à consulter cette ressource"}
 *  },
 *  itemOperations={
 *      "get"={"security"="is_granted('ROLE_INSCRIPTION') or is_granted('ROLE_ENCADREUR')"},
 *      "put"={"security"="is_granted('ROLE_INSCRIPTION')"}
 *  }
 * )
 * @ORM\Entity(repositoryClass="App\Repository\PelerinRepository")
 */
class Pelerin
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"pelerins_read", "pelerins_read", "etat_sante_read"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(message="Le nom de famille du pèlerin est recquis.")
     * @Groups({"pelerins_read", "pelerins_read", "etat_sante_read"})
     */
    private $nom;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(message="Le prénom du pèlerin est recquis.")
     * @Groups({"pelerins_read", "pelerins_read", "etat_sante_read"})
     */
    private $prenom;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(message="Le sexe du pèlerin est recquis.")
     * @Assert\Choice(choices={"M", "F"}, message="Le sexe doit un caractère entre M et F")
     * @Groups({"pelerins_read"})
     */
    private $sexe;

    /**
     * @ORM\Column(type="datetime")
     * @Assert\NotBlank(message="La date de naissance du pèlerin est recquise.")
     * @Groups({"pelerins_read"})
     */
    private $date_naissance;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(message="Le lieu de naissance du pèlerin est recquis.")
     * @Groups({"pelerins_read"})
     */
    private $lieu_naissance;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(message="La résidence du pèlerin est recquise.")
     * @Groups({"pelerins_read"})
     */
    private $residence;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $numero_telephone;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\Email(message="Le format de l'adresse email saisie n'est pas correct")
     * @Groups({"pelerins_read"})
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $numero_whatsapp;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\NotBlank(message="Le numéro du passeport du pèlerin est recquis")
     * @Groups({"pelerins_read"})
     */
    private $numero_passeport;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\NotBlank(message="La nature du passeport du pèlerin est recquis")
     * @Groups({"pelerins_read"})
     */
    private $nature_passeport;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Formule", inversedBy="pelerins")
     * @ORM\JoinColumn(nullable=false)
     * @Groups({"pelerins_read"})
     * @Assert\NotBlank(message="Formule de voyage recquise pour continuer l'opération")
     */
    private $formule;

    /**
     * @ORM\Column(type="datetime")
     * @Groups({"pelerins_read"})
     * @Assert\NotBlank(message="La date d'inscription est requise")
     */
    private $date_inscription;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $inscrit_par;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $numero_inscrit_par;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $en_cas_urgence;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $numero_en_cas_urgence;

    /**
     * @ORM\Column(type="string", length=500, nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $commentaire;

    /**
     * @ORM\Column(type="datetime")
     * @Groups({"pelerins_read"})
     */
    private $created_at;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User")
     * @ORM\JoinColumn(nullable=false)
     * @Groups({"pelerins_read"})
     */
    private $created_by;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $updated_at;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User")
     * @Groups({"pelerins_read"})
     */
    private $updated_by;

    /**
     * @ORM\Column(type="boolean")
     * @Groups({"pelerins_read"})
     */
    private $is_deleted;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @Groups({"pelerins_read"})
     */
    private $deleted_at;

Ce que j'obtiens

Et l'opération POST de création de ressource me propose :

{
  "nom": "string",
  "prenom": "string",
  "sexe": "string",
  "residence": "string",
  "email": "string",
  "formule": "string",
  "commentaire": "string"
}

Et lorsque je veux récuperer des ressources, j'obtiens

 {
            "@id": "/api/pelerins/7",
            "@type": "Pelerin",
            "id": 7,
            "nom": "Knox",
            "prenom": "Tamara",
            "sexe": "M",
            "residence": "Chagai",
            "email": "nunc.id@esttempor.ca",
            "formule": "/api/formules/1",
            "commentaire": null
    }

Je ne comprends pas pourquoi les autres champs n'apparaissent pas. Et ce n'est pas avec cette ressource seulement que je rencontre ce problème.

plusieurs instances dans un form

$
0
0

Bonjour,

Je souhaiterais créer un formulaire qui reprenne 3 fois une entity User (User Pere Mere)
Je suis passé par une nouvelle entity non ORM, le formulaire previent de celle-ci

        $builder
            ->add(
                $builder->create('user', UserType::class)
                    ->add('nom', TextType::class )
                    ->add('prenom', TextType::class)
                    ->add('date', DateType::class )
                    ->add('lieu', TextType::class)
                    ->add('sexe', ChoiceType::class, array(
                        'choices' => array(
                            'Homme' => 'm',
                            'Femme' => 'f' ))),

            )
            ->add(
                $builder->create('pere', UserType::class)
                    ->add('nom', TextType::class )
                    ->add('prenom', TextType::class)
                    ->add('date', DateType::class )
                    ->add('lieu', TextType::class)
                    ->add('sexe', ChoiceType::class, array(
                        'choices' => array(
                            'Homme' => 'm',
                            'Femme' => 'f' )))
            )
            ->add(
                $builder->create('mere', UserType::class)
                    ->add('nom', TextType::class )
                    ->add('prenom', TextType::class)
                    ->add('date', DateType::class )
                    ->add('lieu', TextType::class)
                    ->add('sexe', ChoiceType::class, array(
                        'choices' => array(
                            'Homme' => 'm',
                            'Femme' => 'f' )))
            )
        ;
    }

Donc en twig j'ai bien les champs de l'entity User répétée 3 fois.

Sauf que le formulaire provient d'une entity non ORM donc pas d'accès en BDD,

Il faudrait la faire passer par l'entity User mais y'a t-il une méthode comme repeatedType mais pas par champs mais l'ensemble de l'entity ? et du coup chaque partie soit bien distincte ?

Merci par avance

Plusieurs routes pour une même page

$
0
0

Bonsoir,

Je cherche à avoir plusieurs liens avec une même page
Pouquoi... simplement pour masquer des ancres et faire un défilement automatique vers l'ancre

Ce que je fais

dans mon controller, j'ai pensé dans un premier temps mettre plusieurs @Routes

    /**
     * @Route("/prestations", name="prestations")
     * @Route("/prestations/interventions/forfaits", name="prestations")
     * @Route("/prestations/interventions/depannage-domicile, name="prestations")
     * @return Response
     */

mais... non car cela ne prend que le dernier Route

ensuite j'ai tenté

/**
     *
     * @Route("/prestations/{prefix}", name="prestations", requirements={"prefix":"interventions/forfaits|interventions/depannage-domicile"})
     * @Route("/prestations", name="realisations")
     * @return Response
     */

mais erreur No route found for "GET /prestations/interventions/forfaits"

Ce que je veux

Comprendre car je suis en cours d'apprentissage et c'est un peu la brasse coulée

exemple :
prestations#depannage -> /prestations/interventions/depannage-domicile
prestations#forfaits -> /prestations/interventions/forfaits

J'ai derrière un JS qui me permet de faire un scroll var la DIV contenant l'ID forfaits ou depannage-domicile

Ce que j'obtiens

pour l'instant ... rien de constructif

Merci d'avance pour votre aide

Erreur dans le Controller

$
0
0

Je suis les vidéos de grafikart sur la formation MaSuperAgence

je veux avancer mes ça affiche des erreurs

je veux avancer mes ça affiche des erreurs.

l'erreur est dans le fichier PropertyController

<?php

namespace App\Controller;

use Twig\Environment;
use App\Entity\Property;
use App\Repository\PropertyRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class PropertyController extends AbstractController 
{
  /**
  * @var PropertyRepository
  */

  private $repository;

  public function __construct(PropertyRepository $repository, ObjectManager $em)
  {
    $this->repository = $repository;
    $this->em = $em;
  }

  /**
  * @Route("/biens", name="property.index")
  * @return Response
  */
  public function index(): Response
  {

    return $this->render('property/index.html.twig', [
      'current_menu' => 'properties'
    ]);
  }

   /**
    * @Route("/biens/{slug}-{id}", name="property.show", requirements={"slug": "[a-z0-9\-]*"})
    * @param Property $property
    * @return Response
    */
    public function show(Property $property, string $slug): Response
    {
        if ($property->getSlug() !== $slug) {
            return $this->redirectToRoute('property.show', [
                'id' => $property->getId(),
                'slug' => $property->getSlug(),
            ], 301);
        }
        return $this->render('property/show.html.twig', [
            'property' => $property,
            'current_menu' => 'properties'
        ]);
    }

}

Ce que je veux

je veux que quelqu'un m'aide pour résoudre ce problème
Merci d'avance !!!

Ce que j'obtiens

ArgumentCountError

Too few arguments to function App\Controller\PropertyController::__construct(), 0 passed in C:\wamp\www\MaSuperAgence\var\cache\dev\ContainerQPU4JNr\App_KernelDevDebugContainer.php on line 439 and exactly 2 expected

plusieurs instances dans le même formulaire

$
0
0

Bonjour

Je cherche à créer plusieurs instances de la class User dans le même formulaire.
Dans le controller j'ai crée 3 variables et j'appelle 3 fois le form UserType.
Par contre lors de l'affichage je ne veux pas qu'à la fin de chaque form il y ait le bouton de validation
j'en veux un seul qui englobe tout.

J'ai pensé à créer un $form regroupant les form mais mon erreur provient justement du fait que le form soit un array
voici mon controller

    public function formulaire(Request $request, EntityManagerInterface $entityManagerInterface)
    {
        $user = new User();
        $pere = new User();
        $mere = new User();

        $formUser = $this->createForm(UserType::class, $user);
        $formPere = $this->createForm(UserType::class, $pere);
        $formMere = $this->createForm(UserType::class, $mere);

        $form = [$formUser, $formPere, $formMere];
        $form->handleRequest($request);


        if ($form->isSubmitted() && $form->isValid()) 
        {
            $entityManagerInterface->persist($user);
            $entityManagerInterface->persist($pere);
            $entityManagerInterface->persist($mere);

            $entityManagerInterface->flush();
        }
        return $this->render('formulaire/index.html.twig', [
            'forms' => $form->createView(),
        ]);
    }
}

Redirection 302

$
0
0

Bonjour les amis,

Je rencontre en ce moment un problème avec mon application symfony.

Je souhaite appellé une méthode, qui est sencé me renvoyé des articles selons des critères données.

Il se trouvent qu'il n'existe dans la bdd aucun article qui correspond à aux critères données.

Mais mon soucis est qu'au lieu que Symfony m'affiche la vue avec les critères demandés (en me de disant par exemple qu'il n'y a pas d'exercices qui corresponds au critères), il me redirige vers la route login.

Alors que quand je suis connecté et j'appelle la même méthode, tous se passe bien.

Pourtant ni le namespace, ni la classe, ni la méthode appelé n'est soumis ni à authentification ni à autorisation.

Pour ma part, je pense que le problème viendrait de la classe

LoginFormAuthenticator extends AbstractFormLoginAuthenticator

Comment puis-je régler ce problème ?

Je voudrais pouvoir accéder à la méthode, que je soit logué ou pas et qu'il y ait des articles ou pas.

J'ai l'mpression que le code se comporte comme-ci j'ai demandé une authentification et que je ne lui aurai pas donné les bon paramètres

Voici la méthode login

    /**
     * @Route("/login", name="login")
     */
    public function login (AuthenticationUtils $authenticationUtils)
    {
        $error = $authenticationUtils->getLastAuthenticationError();
        $lastUsername = $authenticationUtils->getLastUsername();
        $this->addFlash('error', 'Impossible de se connecter. Veuillez vérifier votre login et mot de passe');
        return $this->redirectToRoute('home', ['error' => $error]);
    }

probleme namespace

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.

(1/1) ClassNotFoundException
Attempted to load class "ImageUploadListener" from namespace "TGTBundle\EventListener".
Did you forget a "use" statement for another namespace?
in getDoctrine_Dbal_DefaultConnectionService.php line 17

Fonction "assertResponseRedirects", suite tutoriel symfony

$
0
0

Bonjour,

Dans ce tutoriel de Grafikart, on le voit clairement à 8:15 tester une redirection sur "/login" :

        $this->assertResponseRedirects('/login');

Or, je ne suis pas pas parvenu à créer une URL relative, dans mes tests je suis obligé de mettre l'url complète, à savoir :

        $this->assertResponseRedirects('http://localhost/fr/connexion');

Je trouve cela assez gênant. Dans le billet du blog de Symfony, ils semblent également tester une URL complète.

Savez-vous comment tester une URL relative plutôt qu'absolue ?
Merci d'avance

Symfony 4 - Call to a member function getName() on array

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.

Je veux créer une fonction qui retourne la liste des types de chambres d'un hotel.
J'ai fait ceci ci-dessous :

    public function test(RoomTypeRepository $roomTypeRepo, $hotel_id){
        $roomTypes = $this->getDoctrine()
            ->getRepository(RoomType::class)
            ->findByHotel($hotel_id);
        dump($roomTypes);die;
//        return new Response('Cet hotel est le : '.$hotel_id .' et a des chambres' .$roomTypes->getName());
    }

J'aimerais que cela me sorte tous les types de chambres: simple, double, triple.

J'obtiens ce message d'erreur.
Je ne vois pas ce que je suis censé lui indiquer.
J'avais aussi tenté un foreach:

foreach ($roomTypes->getName() as $name)
 {
return new Response('Cet hotel est le : '.$roomTypes->getName());
 }

J'ai essayé des solutions comme celle de stackoverflow: https://stackoverflow.com/questions/30667122/error-call-to-a-member-function-on-array
mais je n'ai pas compris la procédure.
Je suis assez nouveau sur Symfony.

D'avance merci pour le coup de pouce vers la bonne solution :)

Filtre de recherche cassé :/

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suit l'excellente formation Symfony ici proposée, et j'ai un petit soucis (non bloquant) au moment de la recherche par filtre (Vidéo 8/12 Filtrer les biens)
J'ai détourner un filtre de recherche en paramétrant le ChoiceType présent dans le PropertySearchType comme pour le PropertyType.

class AnimalSearchType extends AbstractType

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('maxAge', IntegerType::class, [
                'required' => false,
                'label' => false,
                'attr' => [
                    'placeholder' => ' Quel âge ? ',
                    'min' => 0
                ]
            ])
            ->add('type', ChoiceType::class, [
                'choices' => $this->getChoices()
        ]);
    }

    private function getChoices()
    {
        $choices = Animal::TYPE;
        $output = [];
        foreach ($choices as $k => $v) {
            $output[$v] = $k;
        }
        return $output;
    }

    /////////

    class Animal
{
    const TYPE = [
        0 => 'Chat',
        1 => 'Chien',
        2 => 'Rongeur',
        etc.....

    /////////

    class AnimalRepository extends ServiceEntityRepository
    {
        /**
         * @param AnimalSearch $search
         * @return Query
         */
        public function findAllUnadoptedQuery(AnimalSearch $search): Query
        {
            $query = $this->findUnadoptedQuery();

            if ($search->getMaxAge()) {
                $query = $query->andWhere('a.age <= :maxage')->setParameter('maxage', $search->getMaxAge());
            }
            if ($search->getType()) {
                $query = $query->andWhere('a.type >= :type')->setParameter('type', $search->getType());
            }

            return $query->getQuery();
        }

Ce que je veux

Vous l'aurez compris, le formulaire de recherche doit retrouver des animaux selon leurs âge maximum et leur race, seulement voilà,
le filtre marche très bien, aucun soucis, quand je renseigne la valeurs chien dans l'input ChoiceType, la requête SQL se fait bien avec le type = 1, et me retourne tout les chiens présent en BDD, magnifique, pareil avec la valeur type = 2 etc... Malheureusement, la valeur par défaut étant Chat (type = 0), la requête ne se fait pas, il ne prends même pas en compte la requête SQL.

Ce que j'obtiens

Voila ce que me donne la chaine de requête : http://localhost:8000/animals?maxAge=10&type=0

Et la requête SQL dans le profiler Symfony m'affiche bien la requête pour l'age mais rien pour le type.

Quelqu'un aurait une astuce pour moi siouplé?

Merci a vous pour votre temps

QueryBuilder dans un form

$
0
0

Bonsoir les amis,

Cela fait plusieurs jours que je recherche comment mettre une query builder dans un FormType.

Je viens de trouver une solution qui semble fonctionner

Mais Symfony me renvoie l'erreur suivante :

HTTP 500 Internal Server ErrorExpected argument of type "Doctrine\ORM\QueryBuilder", "array" given

Je ne comprend pas d'où vient cet erreur, car l'impression de faire Query comme j'ai l'habitude de le faire.

Voici mon code dans le fichier FormType

->add('niveau', EntityType::class,
    [
        'class' => Niveau::class,
        'choice_label' => 'nomNiveau',
        'query_builder' => function (NiveauRepository $nr) use ($id_formation, $id_groupement) {

            return $nr->niveauChapitre($id_formation, $id_groupement);
        },
    ]
)
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Chapitre::class,
        'id_formation' => null,
        'id_groupement' => null,

    ]);
}

Voici mon code dans le Repository

/**
 * @return Niveau[] Returns an array of Niveau objects
 */
public function niveauChapitre($id_formation, $id_groupement)
{
    return $this->createQueryBuilder('n')
        ->andWhere('n.formation = :formation')
        ->setParameter('formation', $id_formation)
        ->andWhere('n.groupement = :groupement')
        ->setParameter('groupement', $id_groupement)
        ->getQuery()
        ->getResult()
    ;
}

Bug dans symfony

$
0
0

Salut les amis, je rencontre un problème en ce moment avec mon application.

Je m'explique, depuis le début tous se passé bien, quand j'avais une erreur dans mon code, symfony me disait que dans tel methode, j'ai tel erreur.

Mais depuis quelques jour j'ai fait une modifications dans mon code, j'ai rajouté une queryBuilder dans un de mes formulaire.

Et depuis quand je fais une erreur dans mon code symfony m'affiche cette erreur-ci dans mon code

Expected to find class "App\Controller\Admin\AdminExerciceController" in file "C:\wamp64\www\Projet\src/Controller\Admin\AdminExerciceController.php" while importing services from resource "../src/*", but it was not found! Check the namespace prefix used with the resource in C:\wamp64\www\Projet\config/services.yaml (which is loaded in resource "C:\wamp64\www\Projet\config/services.yaml").

Autrement dit : Il me faut et il me suffit d'oublier un ";" dans l'une des mes méthodes pour que cet erreur-ci s'affiche au lieu de l'affichage classique.

Comment puis-faire pour Symfony m'affiche les erreur normalement ?

Pour info : Je travaille sous Symfony 4.4


Requete complexe SQL - Symfony

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.
Il me donne une erreur

Cannot determine controller argument for "App\Controller\ArroundMeController::getAuthoritativeSportsRecords()": the $request argument is type-hinted with the non-existent class or interface: "App\Controller\request". Did you forget to add a use statement?

Après quelques recherches ils suffisaient simplement de rajouter un Use Response de symfony.
Sauf qu'il y ai déjà.
Je cherche à savoir comment faire une requete aussi complexe que celle-ci avec symfony.
Si quelqu'un à une réponse à m'apporter je suis preneur !


<?php

namespace App\Controller;

use App\Entity\V3Bar;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;

class ArroundMeController extends AbstractController
{
/**
* @Route("/api/geojson/lon")
* @Method("GET")
*/
public function getAuthoritativeSportsRecords(request $request)
{

$sql = "SELECT *, SQRT(POW((69.1 * (v3_bar.lat - 48.862725)) , 2 ) + POW((53 * (v3_bar.lon -2.287592)), 2)) AS distance FROM v3_bar ORDER BY distance ASC LIMIT 20";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll();
}

}

probleme namespace

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.

(1/1) ClassNotFoundException
Attempted to load class "ImageUploadListener" from namespace "TGTBundle\EventListener".
Did you forget a "use" statement for another namespace?
in getDoctrine_Dbal_DefaultConnectionService.php line 17

Récupérer la valeur max d'un formulaire depuis DB symfony 4

$
0
0

Bonjour,

Excusez moi de vous déranger mais j'aimerais obtenir une valeur max pour une validation de formulaire par exemple cela peut être un champ numérique mais la validation de type range MaxValue devra être récupéré dans la base de données je m'explique par exemple je souhaite réserver un transport la valeur max par défaut est de 4 pour 4 place restante mais si pour ce véhicule il reste 3 place faudrait que la validation passe à 3

J'ai essayé de passer par des entitytype avec des événements mais cela n'a rien changé à mon problème il me retournait dans la liste déroulante tout les nombre de place pour chaque véhicule.

L'objectif est de faire un formulaire tout simple un bouton réserver avec juste un moyen de choisir son nombre de place tout en ne pouvant pas dépasser la valeur de la base de données

Par exemple l'URL est /transport/6/book

Il faut trouver le moyen de faire passer la valeur de l'id numéro 6 et la la validation serai entre 1 et 3 par exemple ou créer une liste qui met 1 2 3

Si le transport 7 à 1 place de dispo il faudrait que ça mette 1 uniquement

Excusez moi si je me suis mal exprimée mais ça fait plus d1 semaines que je suis dessus et je n'y arrive pas alors j'ai remit à un ancien commit pour que l'application continue de fonctionner
Je suis débutante la dedans alors les fonctionnalité avancée du formulaire je ne connais pas mais je maîtrise bien les repository twig etc c'est juste cette partie qui est bloquante, merci d'avance de votre aide

Authentification dans symfony

$
0
0

Salut les amis,
Je cherche à créer un formulaire pour l'AUTORISATION après AUTHENTIFICATION. Mais je voudrais que le username et le mots de passe utilisé pour l'AUTORISATION soit différents de ceux utilisés pour l'authentifications.
Comment puis-je faire cela ?

PHP documentor avec Symfony

$
0
0

Bonjour,

Je suis actuellement en train de documenter mon application symfony.

Mais je rencontre un problème avec php documentor.
Lorsque je génère la documentation, les classes ne sont pas incluses dans la documentation, est-ce que quelqu'un a déjà rencontré ce problème ? Savez-vous comment faire ?

Merci à vous.

Entourez votre code pour bien le mettre ue je veux

Décrs cherchez à obtenir

### Ce que j'obtiens

Viewing all 1542 articles
Browse latest View live