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

Dynamiser une page symfony avec la base de donnée

$
0
0

svp je suis new sur symfony !
j'ai une page qui contient un ensemble des produits ,pour l'instant elle est statique , je veux dynamiser cette page pour qu"elle affiche ces produits à partir de la base de donnée selon des critères comme les plus populaires , les nouveaux produits etc ... avez vous une idée comment le faire ?
merci d'avance


Connexion à une BDD existante

$
0
0

Bonjour,

Je cherche à connecter une BDD (mysql) existante (qui est hégerbé sur un serveur Microsoft IIS) à mon projet Symfony 4.4 que j'ai créé.

Le fichier .env :
DATABASE_URL=mysql://user:password@host/dbname

Le fichier doctrine.yaml :

doctrine:
    dbal:
        url: '%env(DATABASE_URL)%'

        # IMPORTANT: You MUST configure your server version,
        # either here or in the DATABASE_URL env var (see .env file)
        # server_version: '5.7'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

La chose à savoir c'est que pour accéder à la BDD, par exemple via phpmyadmin, je passe via un VPN car la BDD est privé bien entendu.
Est-ce que c'est pour cela que je n'arrive pas à me connecter ?
J'ai fais beaucoup de recherche, mais sans résultat.

Merci de l'aide.

Git et le fichier .env - configuration de connexion à la BDD

$
0
0

Bonjour,

C'est un projet sur développé avec Symfony 4.
Je viens demander quelle est la bonne pratique pour éviter de changer à la main (toutes les fois après un git clone et un git push) la configuration de connexion à la base de données qui se trouve dans le fichier .env ?

Par exemple

$ git clone adresse/distant/monprojet.git
$ cd monprojet
// ici je fais mes modifications
// Je MODIFIE à la main la ligne DATABASE_URL=mysql://userdistant:secretcodedistant@127.0.0.1:3306/dbnamedistant du fichier .env car c'est la configuration du serveur
//  Je fais mes tests en local
// Je REMODIFIE à la main la ligne DATABASE_URL=mysql://userllocal:secretcodelocal@127.0.0.1:3306/dbnamelocal du fichier .env car c'est la configuration de la base de données en local
$ git add .
$ git commit -m "message de mon commit"
$ git push origin master

Je suis obligé de modifier à la main cette ligne de configuration à chaque git clone et après chaque git push. Existe-t-il une bonne pratique sur la façon de faire pour éviter cela ?

Merci d'avance pour vos réponses, et merci d'avoir pris le temps de me lire

Integration MDBootstrap

$
0
0

Bonjour,

Voila je rencontre un problème avec mon code.

import 'mdbootstrap/css/bootstrap.css'
import 'mdbootstrap/css/mdb.css'
import 'mdbootstrap/js/bootstrap.js'
import 'mdbootstrap/js/mdb.js'

import $ from 'jquery';

En executant la commande npm run dev-server, tout fonctionne...
Mais losque je charge la page j'obtiens cette erreur dans la console : TypeError: "exports" is read-only

Merci d'avance !

Changer la taille d'un fichier avant upload avec vich/uploader-bundle

$
0
0

Bonjour,

Je cherche dans la doc et sur le net un peu partout maintenant une solution pour diminuer la taille des images avant l'upload par mes utilisateurs.
Deux solutions s'offrent à moi :
Je modifie la restriction de la taille autorisé dans l'upload
Je trouve une solution pour redimensionner les images avant l'upload avec un max de 2Go

Actullement j'ai déjà essayé un truc trouvé sur le net en Javascript mais le résultat n'est pas du tout convenable, j'ai donc laissé tomber.

Comme j'utilise le bundle VichUploader je pense qu'il doit y avoir un moyen de resize les images avant l'upload.
J'ai vu dans la documentation de VichUpload qu'il y une annotation "dimension" mais je ne trouve aucune doc qui en parle, je voulais savoir si cette annotation pouvait être la solution et si oui comment l'utiliser ? Si non existe t il véritablement une solution avec VichUploader ?

PS : la doc - https://github.com/dustin10/VichUploaderBundle

Je vous remercie par avance de votre réponse.

Bonne journée.

Panam

Afficher un espace où chaque user à un article qu'il a créé

$
0
0

Salut,

J'ai suivi le tuto Apprendre Symfony, j'essaie de pousser un peu plus en affichant à chaque connexion que les biens créer par l'utulisateur connecté.

Mais suis bloqué, j'ai crée une relation ManyToMany entre users et Property. Pouvez vous m' aider?

Lancer le Hub de mercure dans symfony

$
0
0

Bonjour, j'ai installé symfony 4.4 et mercure, voilà le problème que j'ai c'est de lancer le hub, voilà la commande proposée par la documentation de symfony :

 ./mercure --jwt-key='aVerySecretKey' --addr='localhost:3000' --allow-anonymous --cors-allowed-origins='*'

mais lorsque je tape cette commande j'ai l'erreur suivante:

./mercure : Le terme «./mercure» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou
programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès
est correct et réessayez.
Au caractère Ligne:1 : 2
+  ./mercure --jwt-key='aVerySecretKey' --addr='localhost:3000' --allow ...
+  ~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (./mercure:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Je me demande s'il ya une s'il faut configurer quelque chose de particulier.
ou bien dans quel dossier il faut se positionner pour exécuter la commande.
Je suis sous windows 10. Merci

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

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

Dynamiser une page symfony avec la base de donnée

$
0
0

svp je suis new sur symfony !
j'ai une page qui contient un ensemble des produits ,pour l'instant elle est statique , je veux dynamiser cette page pour qu"elle affiche ces produits à partir de la base de donnée selon des critères comme les plus populaires , les nouveaux produits etc ... avez vous une idée comment le faire ?
merci d'avance


Symfony 4 requête repository

$
0
0

Bonjour,

Voilà je rencontre un petit problème avec mon code.
Je travaille actuellement sur un projet Symfony 4.
Je voudrais faire en sorte d'afficher les 10 derniers RDV entrés dans la base de données par rapport à une caractéristique IdVille .
IdVille est la clé primaire la table ville.
Voici les liens entre mes tables :
RDV lien manytoone medecin
medecin manytomany ville
ville manytomany user

Voici la function dans mon repository que j'ai essayer de faire :

public function getLastAdverts()
{

$qb = $this->createQueryBuilder('RDV');

$qb

    ->select('RDV')
    ->where('RDV.medecin.ville = user.ville')
    ->orderBy('RDV.date' , 'DESC')
    ->setMaxResults(10);

    return $qb->getQuery()->getResult();

}

Mais elle ne fonctionne pas et je ne trouve rien d'intéressant sur le net ...
Merci d'avance pour votre réponse

SF5 Manjaro, phpstorm, xdebug ...

$
0
0

Bonjour,
Bonjour,

je suis sur manjaro, et j'essaie de faire tourner symfony 5, Phpstorm, php 7.4, xdebug .... tout fonctionne !!

le probleme que je rencontre est le suivant :
sur phpstorm je passe en mode "debug zero confug" ca fonctionne puis sans riens changer ca ne fonctionne plus! je lance la commande symfony serve pour lancer le server.

dans phpstorm -> setting->debug-> la validation fonctionne à des moments puis plus à d'autres.

une idée sur le pourquoi du comment****

Tout mon css a disparu !

$
0
0

Je m'explique . J'ai ouvert phpstorm pour bosser ce matin et je découvre un onglet "npm" que je n'avais jamais vu avant . je clique donc dessus pour voir ce que c'est et d'un coup une console ouvre avec plusieurs erreurs avec beaucoup de fois marquer node.js, je vérifie que rien n'est bouger dans mon projet et patatra je découvre que tout ce qu'il y avait dans mon dossier public/buld à disparus ! Plus rien . je vais donc voir dans le local history et rien du tout . Help me !! ... 

je précise mon fichier css est fait avec le webpack encore .

Filtre et formulaire

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code, je travaille sur un site de réservation de salles de classe.

Ce que je fais et ce que je souhaite

Je souhaite sur ma page "Réserver" (book), que les utilisateurs lancent une recherche pour voir toutes les salles disponibles à la réservation en fonction de la date d'arrivée (dateFrom), de la date de fin (dateTo), ainsi qu'en fonction de deux filtres (la capacité minimale et les options de la salle).

Lorsque je veux rendre ma page, j'obtiens une erreur qui m'indique que ma variable $rooms est vide. Ce qui est normal car la variable $rooms est censé contenir l'ensemble des salles disponibles à la réservation et que le formulaire n'a pas été traité. Mais comment faire pour que le formulaire avant de vouloir utiliser mes variables $rooms et $search (vide aussi au passage).
Voici mon controller, la classe de ma recherche, ma vue ainsi que le RoomRepository.

    /**
     * @Route("/book/{id_user}", name="booking.new")
     * @param Request $request
     * @param RoomRepository $roomRepository
     * @return Response
     */
    public function book(Request $request, RoomRepository $roomRepository)
    {
        $search = new RoomSearch();
        $form = $this->createForm(RoomSearchType::class, $search);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()
        {
            $rooms = $roomRepository->getAvailableRooms($search);
        }
        return $this->render("profile/booking/book.html.twig", array(
            'form' => $form->createView(),
            'rooms' => $rooms,
            'search' => $search
        ));
    }
{% block body %}
<body>
    <div class="jumbotron transparence">
        <div class="container">
            <h1>Réserver</h1>
            <h4>Au nom de :  <b>{{ app.user.name }} {{ app.user.lastName }} </b></h4>
            {{ form_start(form) }}
            <div class="row">
                <div class="col">
                    {{ form_row(form.title)}}
                </div>
            </div>
            <div class="row">
                <div class="col">
                    {{ form_row(form.dateFrom) }}
                </div>
                <div class="col">
                    {{ form_row(form.dateTo) }}
                </div>
            </div>
            <div class="row">
                <div class="col">
                    {{ form_row(form.minCapacity)}}
                </div>
            </div>
            <div class="row">
                <div class="col">
                    {{ form_row(form.options)}}
                </div>
            </div>
            <button class="btn btn-primary">Rechercher</button>
            {{ form_end(form) }}

        </div>
    </div>

    <div class="jumbotron transparence">
        <div class="container">
            <table class="table">
                <thead>
                    <tr>
                        <th>Salle</th>
                        <th>Disponibilité</th>
                        <th>Capacité</th>
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody>
                    {% for room in rooms %}
                        <tr>
                            <td>{{room.title}}</td>
                            <td>Disponible</td>
                            <td>{{ room.capacity }}</td>
                            {% if room.authorization == 1 %}
                                <td>
                                    <a class="btn btn-success" href="{{ path('book.new.room', {'id_user': app.user.id, 'id_room': room.id, 'date_in': search.dateFrom, 'date_out': search.dateTo, 'title': search.title, 'state': 1}) }}">Réserver maintenant</a>
                                </td>
                            {% elseif room.authorization == 0 %}
                                <td>
                                    <a class="btn btn-info" href="{{ path('book.new.room', {'id_user': app.user.id, 'id_room': room.id, 'date_in': search.dateFrom, 'date_out': search.dateTo, 'title': search.title, 'state': 0}) }}">Demander la réservation</a>
                                    <a tabindex="0" class="btn btn-link" role="button" data-toggle="popover" data-trigger="focus" title="Pourquoi une demande de réservation ?" data-content="Cette salle nécessite l'accord d'un responsable pour que la réservation ait bien lieu">
                                        <span class="fas fa-question-circle"></span>
                                    </a>
                                </td>
                            {% endif %}
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</body>
class RoomRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Room::class);
    }

    public function getAvailableRooms(RoomSearch $search)
    {
        $em = $this->getEntityManager();

        $qb = $em->createQueryBuilder();

        $date_start = $search->getDateFrom()->format('Y-m-d H:i:s');
        $date_final = $search->getDateTo()->format('Y-m-d H:i:s');

        $nots = $em->createQuery("
        SELECT IDENTITY (b.room) FROM App:Booking b
            WHERE NOT (b.endAt   < '$date_start'
            OR
            b.beginAt > '$date_final')
        ");

        $dql_query = $nots->getDQL();
        $qb->resetDQLParts();


        $query = $qb->select('r')
            ->from('App:Room', 'r')
            ->andWhere($qb->expr()->notIn('r.id', $dql_query ));

        if ($search->getMinCapacity())
        {
            $query =  $query
                ->andWhere('r.capacity >= :mincapacity')
                ->setParameter('mincapacity', $search->getMinCapacity());
        }

        if ($search->getOptions()->count() > 0)
        {
            $k = 0;
            foreach ($search->getOptions() as $option)
            {
                $k++;
                $query = $query
                    ->andWhere(":option$k MEMBER OF r.options")
                    ->setParameter("option$k", $option);
            }
        }

        try
        {
            return $query->getQuery()->getResult();
        }
        catch (\Doctrine\ORM\NoResultException $e)
        {
            return null;
        }
    }
}
class RoomSearch
{
    /**
     * @var string
     */
    private $title;

    /**
     * @var DateTime
     */
    private $dateFrom;

    /**
     * @var DateTime
     */
    private $dateTo;

    /**
     * @var int|null
     */
    private $minCapacity;

    /**
     * @var ArrayCollection
     */
    private $options;

    public function __construct()
    {
        $this->options = new ArrayCollection();
    }

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

    /**
     * @param string $title
     * @return RoomSearch
     */
    public function setTitle(string $title): RoomSearch
    {
        $this->title = $title;
        return $this;
    }

    /**
     * @return DateTime
     */
    public function getDateFrom(): ?DateTime
    {
        return $this->dateFrom;
    }

    /**
     * @param DateTime $dateFrom
     * @return RoomSearch
     */
    public function setDateFrom(DateTime $dateFrom): RoomSearch
    {
        $this->dateFrom = $dateFrom;
        return $this;
    }

    /**
     * @return DateTime
     */
    public function getDateTo(): ?DateTime
    {
        return $this->dateTo;
    }

    /**
     * @param DateTime $dateTo
     * @return RoomSearch
     */
    public function setDateTo(DateTime $dateTo): RoomSearch
    {
        $this->dateTo = $dateTo;
        return $this;
    }

    /**
     * @return int|null
     */
    public function getMinCapacity(): ?int
    {
        return $this->minCapacity;
    }

    /**
     * @param int|null $minCapacity
     * @return RoomSearch
     */
    public function setMinCapacity(int $minCapacity): RoomSearch
    {
        $this->minCapacity = $minCapacity;
        return $this;
    }

    /**
     * @return ArrayCollection
     */
    public function getOptions(): ArrayCollection
    {
        return $this->options;
    }

    /**
     * @param ArrayCollection $options
     * @return RoomSearch
     */
    public function setOptions(ArrayCollection $options): RoomSearch
    {
        $this->options = $options;
        return $this;
    }
}

Merci beaucoup !

faire persister les elements avec le collectionType

$
0
0

Bonjour,
Je suis débutant en symfony pourtant j'aime bien ce framework.
j'aimerais rajouter des elements à partir d'un formulaire imbriqué.je veux ajouter des photos(entité Photo) dans mon formulaire ajouter une chaussure (de l'entité ModeleChaussure) à partir d'un formulaire imbriqué

Voila je rencontre un petit problème avec mon code.
le code m'a lair normal

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

```Entyté ModeleChaussure:
<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use http\Env\Url;

/**

  • @ORM\Entity(repositoryClass="App\Repository\ModeleChaussureRepository")
    /
    class ModeleChaussure
    {
    /
    *

    • @ORM\Id()
    • @ORM\GeneratedValue()
    • @ORM\Column(type="integer") */ private $id;

    /**

    • @ORM\Column(type="string", length=100) */ private $nom;

    /**

    • @ORM\Column(type="decimal", precision=10, scale=2) */ private $prix;

    /**

    • @ORM\OneToMany(targetEntity="App\Entity\Commentaire", mappedBy="modele") */ private $commentaires;

    /**

    • @ORM\ManyToMany(targetEntity="App\Entity\Commande", inversedBy="modeleChaussures") */ private $commandes;

    /**

    • @ORM\ManyToMany(targetEntity="App\Entity\Taille", inversedBy="modeleChaussures") */ private $tailles;

    /**

    • @ORM\OneToMany(targetEntity="App\Entity\Promotion", mappedBy="modeleChaussure") */ private $promotions;

    /**

    • @ORM\ManyToOne(targetEntity="App\Entity\Marque", inversedBy="modeleChaussures")
    • @ORM\JoinColumn(nullable=false) */ private $marque;

    /**

    • @ORM\OneToMany(targetEntity="App\Entity\Photo",cascade={"persist"}, mappedBy="modeleChaussure") */ private $photo;

    /**

    • @var photo */ private $photos;

    /**

    • @ORM\Column(type="string", length=255, nullable=true) */ private $description;

    /**

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

    public function __construct()
    {
    $this->commentaires = new ArrayCollection();
    $this->commandes = new ArrayCollection();
    $this->tailles = new ArrayCollection();
    $this->promotions = new ArrayCollection();
    $this->photos = new ArrayCollection();
    }

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

    public function getNom(): ?string
    {
    return $this->nom;
    }

    public function setNom(string $nom): self
    {
    $this->nom = $nom;

    return $this;
    

    }

    public function getPrix(): ?string
    {
    return $this->prix;
    }

    public function setPrix(string $prix): self
    {
    $this->prix = $prix;

    return $this;
    

    }

    /**

    • @return Collection|Commentaire[] */ public function getCommentaires(): Collection { return $this->commentaires; }

    public function addCommentaire(Commentaire $commentaire): self
    {
    if (!$this->commentaires->contains($commentaire)) {
    $this->commentaires[] = $commentaire;
    $commentaire->setModele($this);
    }

    return $this;
    

    }

    public function removeCommentaire(Commentaire $commentaire): self
    {
    if ($this->commentaires->contains($commentaire)) {
    $this->commentaires->removeElement($commentaire);
    // set the owning side to null (unless already changed)
    if ($commentaire->getModele() === $this) {
    $commentaire->setModele(null);
    }
    }

    return $this;
    

    }

    /**

    • @return Collection|Commande[] */ public function getCommandes(): Collection { return $this->commandes; }

    public function addCommande(Commande $commande): self
    {
    if (!$this->commandes->contains($commande)) {
    $this->commandes[] = $commande;
    }

    return $this;
    

    }

    public function removeCommande(Commande $commande): self
    {
    if ($this->commandes->contains($commande)) {
    $this->commandes->removeElement($commande);
    }

    return $this;
    

    }

    /**

    • @return Collection|Taille[] */ public function getTailles(): Collection { return $this->tailles; }

    public function addTaille(Taille $taille): self
    {
    if (!$this->tailles->contains($taille)) {
    $this->tailles[] = $taille;
    }

    return $this;
    

    }

    public function removeTaille(Taille $taille): self
    {
    if ($this->tailles->contains($taille)) {
    $this->tailles->removeElement($taille);
    }

    return $this;
    

    }

    /**

    • @return Collection|Promotion[] */ public function getPromotions(): Collection { return $this->promotions; }

    public function addPromotion(Promotion $promotion): self
    {
    if (!$this->promotions->contains($promotion)) {
    $this->promotions[] = $promotion;
    $promotion->setModeleChaussure($this);
    }

    return $this;
    

    }

    public function removePromotion(Promotion $promotion): self
    {
    if ($this->promotions->contains($promotion)) {
    $this->promotions->removeElement($promotion);
    // set the owning side to null (unless already changed)
    if ($promotion->getModeleChaussure() === $this) {
    $promotion->setModeleChaussure(null);
    }
    }

    return $this;
    

    }

    public function getMarque(): ?Marque
    {
    return $this->marque;
    }

    public function setMarque(?Marque $marque): self
    {
    $this->marque = $marque;

    return $this;
    

    }

    public function __toString()
    {
    // TODO: Implement __toString() method.
    return $this->nom;
    }

    /**

    • @return Collection|Photo[] */ public function getPhotos(): Collection { return $this->photos; }

    public function addPhoto(Photo $photo): self
    {
    if (!$this->photos->contains($photo)) {
    $this->photos[] = $photo;
    $this->photos->add($photo);
    $photo->setModeleChaussure($this);
    }

    return $this;
    

    }

    public function removePhoto(Photo $photo): self
    {
    if ($this->photos->contains($photo)) {
    $this->photos->removeElement($photo);
    // set the owning side to null (unless already changed)
    if ($photo->getModeleChaussure() === $this) {
    $photo->setModeleChaussure(null);
    }
    }

    return $this;
    

    }

    public function setPhoto(photo $photo): self
    {
    $this->$photo;
    return $this;
    }

    public function getPhoto(): ?photo
    {
    return $this->photo;
    }

    public function getDescription(): ?string
    {
    return $this->description;
    }

    public function setDescription(?string $description): self
    {
    $this->description = $description;

    return $this;
    

    }

    public function getCoverImage(): ?string
    {
    return $this->coverImage;
    }

    public function setCoverImage(string $coverImage): self
    {
    $this->coverImage = $coverImage;

    return $this;
    

    }

    Entité Photo:

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**

  • @ORM\Entity(repositoryClass="App\Repository\PhotoRepository")
    /
    class Photo
    {
    /
    *

    • @ORM\Id()
    • @ORM\GeneratedValue()
    • @ORM\Column(type="integer") */ private $id;

    /**

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

    /**

    • @ORM\ManyToOne(targetEntity="App\Entity\ModeleChaussure", cascade={"persist"} ,inversedBy="photos")
    • @ORM\JoinColumn(nullable=false) */ private $modeleChaussure; private $photo;

    public function __construct()
    {

    $this->modeleChaussure = new ArrayCollection();
    

    }

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

    public function getUrl(): ?string
    {
    return $this->url;
    }

    /**

    • @return Collection|ModeleChaussure[] */ public function getModeleChaussure(): Collection { return $this->modeleChaussure; }

    public function add(ModeleChaussure $modeleChaussure): self
    {
    if (!$this->modeleChaussure->contains($modeleChaussure)) {
    $this->modeleChaussure[] = $modeleChaussure;
    $modeleChaussure->setPhoto($this);
    }

    return $this;
    

    }

    public function remove(ModeleChaussure $modeleChaussure): self
    {
    if ($this->modeleChaussure->contains($modeleChaussure)) {
    $this->modeleChaussure->removeElement($modeleChaussure);
    // set the owning side to null (unless already changed)
    if ($modeleChaussure->getPhoto() === $this) {
    $modeleChaussure->setPhoto(null);
    }
    }

    return $this;
    

    }

    public function setModeleChaussure(?ModeleChaussure $modeleChaussure): self
    {
    $this->modeleChaussure = $modeleChaussure;

    return $this;
    

    }

    public function setUrl(string $url)
    {
    $this->url;
    return $this;
    }

}

ModeleChaussureType:
<?php

namespace App\Form;

use App\Entity\Marque;
use App\Entity\ModeleChaussure;
use App\Entity\Taille;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ModeleChaussureType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom', TextType::class)
->add('prix',MoneyType::class)
->add('description', TextareaType::class)
->add('coverImage',FileType::class,array('label'=>'importez une image de couverture'

        ))
        ->add('tailles', EntityType::class, [
            'class' => Taille::class,
            'choice_label' => 'taille',
            'multiple' => true
        ])
        ->add('marque',EntityType::class,[
            'class'=>Marque::class,
            'choice_label'=>'nom'
        ])

       ->add(
            'photos',
            CollectionType::class, [
                'entry_type' => PhotoType::class,
                'allow_add'=>true,
           'entry_options' => ['label' => false],
           'prototype' => true,
           'by_reference' => false,
       ])


        ->add('Ajouter une nouvelle chaussure',SubmitType::class,[
            'attr'=>[
                'class'=>'btn btn-success'
            ]
        ])

    ;
}

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

PhotoType:
<?php

namespace App\Form;

use App\Entity\Photo;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PhotoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('url',FileType::class,array('label'=>'ajouter une autre image'))
;
}

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

}

controller contenant la fonction pour créer un modele chaussure:

<?php

namespace App\Controller;

use App\Entity\ModeleChaussure;
use App\Form\ModeleChaussureType;
use App\Repository\ClientRepository;
use App\Repository\MarqueRepository;
use App\Repository\ModeleChaussureRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class DetailChaussureController extends AbstractController
{
/**
* @var ClientRepository
/
private $marqueRepository;
private $clientRepository;
function __construct(MarqueRepository $marqueRepository,ClientRepository $clientRepository)
{
$this->marqueRepository = $marqueRepository;
$this->clientRepository=$clientRepository;
}
/
*
* @Route("/detail/chaussure/{id}", name="detail_chaussure")
*/
public function index(ModeleChaussureRepository $repository, int $id)
{
$list = $this->marqueRepository->findAll();
$chaussure = $repository->find($id);
return $this->render('detail_chaussure/index.html.twig', [
'chaussure' => $chaussure,'list'=>$list
]);
}

/**
 * @Route("/chaussure/new", name="chaussure_nouveau")
 * @param Request $request
 * @param EntityManagerInterface $manager
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function create(Request $request)
{

    $chaussure = new ModeleChaussure();
    $manager=$this->getDoctrine()->getManager();
    $form = $this->createForm(ModeleChaussureType::class, $chaussure);
    $form->handleRequest($request);


    if($form->isSubmitted() && $form->isValid()) {
        $manager=$this->getDoctrine()->getManager();

   foreach($chaussure->getPhotos() as $photo)
    {
        $photo->setModeleChaussure($chaussure);
        $manager->persist($photo);

    }


   $file = $form->get('coverImage')->getData();
        $fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
        try{
            $file->move(
                $this->getParameter('coverImage_directory'),
                $fileName
            );
        }
        catch (fileException $e){

        }

      $manager=$this->getDoctrine()->getManager();

        $chaussure->setCoverImage($fileName);
        $manager->persist($chaussure);
        $manager->flush();

        $this->addFlash('success',
            "Bravo le modele<strong class='text-danger'>{$chaussure->getNom()}</strong> est bien ajouté");
        return $this->redirectToRoute('home');
    }
    $list = $this->marqueRepository->findAll();

    return $this->render('detail_chaussure/nouvelle_chaussure.html.twig', ['form'=>$form->createView(),
        'list'=>$list
    ]);
}

private function generateUniqueFileName()
{

    return md5(uniqid());
}

la vue Twig permettant d'afficher le formulaire d'ajout chaussure:

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

{% block title %}creation d'une nouvelle chaussure!{% endblock %}

{% form_theme form _self %}

{% block body%}


Créer une nouvelle chaussure


{{ form_start(form) }}
{{ form_row(form.nom, {'label': 'Nom','attr': {'placeholder': 'nom de la chaussure...'}}) }}
{{ form_row(form.prix, {'label': 'Prix','attr': {'placeholder': 'prix de la chaussure...'}}) }}
{{ form_row(form.description, {'label': 'description', 'attr': {'placeholder': 'ajouter une description...'}}) }}
    {{ form_row(form.tailles, {'label': 'la taille', 'attr': {'placeholder': 'selectionnez une taille...'}}) }}
    {{ form_row(form.marque, {'label': 'Sélectionnez la marque', 'attr': {'placeholder' : 'Votre marque...'}})}}

    <div class="form-group">
        <button type="button" id="add-photo" class="btn btn-primary">Ajouter une image</button>
    </div>

    {% block _modeleChaussure_photos_widget %}

Ici,vous pouvez ajouter vos propres photos!

{{ form_widget(form) }}

{{ form_end(form) }}
{% endblock %}

{% endblock %}

 {% block _chaussure_entry_widget %}
 <div class="form-group" id="block_{{id}}">
     <div class="row">
         <div class="col-10">
             <div class="row">
                 <div class="col">
                     {{ form_widget(form.url) }}
                 </div>

             </div>
         </div>
         <div class="col-2">
             <button type="button" class="btn-btn-danger">supprimer</button>
         </div>
     </div>

 </div>
 {% endblock %}

    {% block javascripts %}

        <script>

            $('#add-photo').click(function()
            {
                const index = $('#modele_chaussure_photos div.form-group');
                const tmpl= $('#modele_chaussure_photos').data('prototype').replace(/_name_/g, index);

              $('#modele_chaussure_photos').append(tmpl);
            });
        </script>
    {% endblock %}

Entourez votre code pour bien le mettre en forme


### Ce que je veux

Décrivez ici ce que vous cherchez à obtenir
la nouvelle chaussure s'ajoute mais pas  les photos donc ils n'apparaissent pas dans la base de donnée
### Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(
on ne m'affiche aucun messaged'erreur.
s'il vous plait j'ai besoin de votre aide .ça fait une semaine que je galère dessus.
Merci d'avance

Api Platform ManyToMany

$
0
0

Bonjour,

Et merci par avance à ceux qui liront ce post. Je suis actuellement entrain de réaliser une api de gestion de paie (pour m'entrainer et apprendre api platform). Mais voilà quand je demande qu'il me retourne les données autorisé pour un admin ou un manager avec context builder , il ne reconnais pas les rôles. J'ai fait un dump dans le context builder pour voir si il prenais le groups admin quand j'en appelé un, mais il ne prend que le manager qui est dans l'entity. Comme c'est une relation manyToMany j'ai une table d'association entre salarie et role. Je pense que le problème viens de là. J'ai fait un @joinTable en commentaire, j'ai pas mal recherché sur internet (3 jours au total), mais il est possible que je ne tape pas ce qu'il faut ou que l'origine du soucis ne sois pas ce que je crois. J'espère que j'ai exprimé clairement mon soucis. SI vous pensez que cela vient d'autre chose je suis à l'écoute de toutes suggestions.
Les roles :
secrétaires : role_admin
directeur : role_manager
le reste : role_salarie
J'ai pas fait les fixtures pour toutes les tables.
Vous retrouverai mon code ici : https://gitlab.com/bmelanie/api-gestion-paie

Merci par avance.

Créer reCAPTCHA avec Google

$
0
0

Bonjour les amis

Je suis en train de mettre en place le reCAPTCHA de Google sur un projet Symfony.

J'utilise le bundle BeelabRecaptcha2Bundle

J'ai l'impression d'avoir fait tous ce qui est demandé dans la doc

Mais je rencontre deux soucis.

Le premier c'est mon bouton ne s'affiche pas

Et le deuxieme est que j'ai un message d'erreur qui me dit que mon reCAPTCHA est invalid

Voici mon formType

        ->add('captcha', RecaptchaSubmitType::class, [
            'label' => true
        ])

Voici ma vue

                    {{ form_start(formRegister) }}
                        <div class="row">

                            <div class="form-group col-12">
                                <label>Pseudo</label>
                                {{form_widget(formRegister.username)}}
                            </div>
                        </div>

                        <div class="row">
                            <div class="form-group col-12">
                            {{form_widget(formRegister.password)}}
                            </div>
                        </div>

                        <div class="row">
                            <div class="form-group col-12">
                                <label>Adresse mail22</label>
                                {{form_widget(formRegister.email)}}
                            </div>
                        </div>
                    {{ form_end(formRegister)}}

Voici mon JS

<script type="text/javascript">
    function recaptchaCallback (token) {
        var elem = document.querySelector(".g-recaptcha");
        while ((elem = elem.parentElement) !== null) {
            if (elem.nodeType === Node.ELEMENT_NODE && elem.tagName === 'FORM') {
                elem.submit();
                break;
            }
        }
    } 
</script>

J'arrive pas à comprendre pourquoi j'ai ces erreurs !


afficher une image blob

$
0
0

Bonjour,

je voudrai afficher dans mon twig une image sous forme de blob stocké dans ma bd, cette image étant accessible uniquement par l'utilisateur connecté (comme une image de profil) avec deux table user et image

Ce que je fais


{% extends 'base.html.twig' %}
{% block title %} Profil {% endblock %}
{% block body %}

<p>{{dump(app.user.image)}}<p>

{% endblock %}

Ce que j'obtiens

Proxies_CG_\App\Entity\Image {#573 ▼
-data: stream resource @727 ▼
wrapper_type: "PHP"
stream_type: "TEMP"
mode: "w+b"
unread_bytes: 0
seekable: true
uri: "php://temp"
options: []
}

accès impossible à Faker\Factory

$
0
0

Bonjour,

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

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Article;
use App\Form\ArticleType;
use App\Repository\ArticleRepository;
use Fake\Factory;

class BlogController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function home(){
$form = Factory::create('Fr_fr');
var_dump($form);
return $this->render('blog/home.html.twig');
}

/**
 * @Route("/blog", name="blog")
 */
public function index(ArticleRepository $repo)
{
    $articles = $repo->findAll();
    return $this->render('blog/index.html.twig', [
        'controller_name' => 'BlogController',
        'articles' => $articles,
    ]);
}

/**
 * For create an article
 *
 * @Route("/blog/new", name="blog_create")
 * @Route("/blog/{id}/edit", name="blog_edit")
 */
public function form(Article $article = null, Request $request, EntityManagerInterface $manager){
    ($article) ? null : $article = new Article();

    // $form =$this->createFormBuilder($article)
    //             ->add('title')
    //             ->add('content')
    //             ->add('image')
    //             ->getForm();

    $form = $this->createForm(ArticleType::class, $article);    //Création de l'objet de formulaire


    $form->handleRequest($request); //Analyse de la requêtte et remplissage si besoin de l'article
    if($form->isSubmitted() && $form->isValid()){
        ($article->getId()) ? null : $article->setCreatedAt(new \DateTime());
        $manager->persist($article);
        $manager->flush();
        return $this->redirectToRoute('blog_show', ['id' => $article->getId()]);
    }

    return $this->render("blog/form.html.twig", [
        'formArticle' => $form->createView(),
        'editMode' => $article->getId() !== null
        ]);
}

/**
 * @Route("/blog/{id}", name="blog_show")
 */
public function show(Article $article){
    return $this->render("blog/show.html.twig", [
        'article' => $article,
    ]);
}

}

Je voudrais utiliser un Faker pour générer des fixtures, mais le framework ne retrouve pas la librairie et renvoie le message suivant :
Attempted to load class "Factory" from namespace "Fake".
Did you forget a "use" statement for e.g. "Faker\Factory" or "Doctrine\Migrations\Version\Factory"?

je penses personnelement qu'il s'agit d'un problème de namespace mais je n'ai aucune idée de comment le resoudre.
Y'a t'il un moyen de me sortir de là?

Merci de votre aide ;)

Bonne journée !

symfony probleme de controller

$
0
0

Bonjour,

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

Ce que je fais

bonjour, je suis le tuto de symfony et je suis sur la video2 je rencontre une erreur :
On me dit au'il n'ya pas de constructeur dans le controller. Merci d'avance


namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;

class HomeController extends AbstractController
{
    /**
     * @Route("/",name="home")
     * return Response
     */

    public function index():Response 
     {
        return $this->render('pages/home.html.twig');
    }
} 
Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(
Invalid service "App\Controller\HomeController": class has no constructor.

Swiftmailer utilisation

$
0
0

Bonjour,

J'ai besoin d'un coup de pouce pour l'utilisation de swift mailer

Ce que je fais

Je cherche simplement à créer une classe mail avec dans le futur plusieurs fonctions, mais pour le moment qu'une seule.
La fonction SendWelcomeMessage prend un objet user en argument

class MailController extends AbstractController

{

    public function SendWelcomeMessage(users $user)
    {
        $mailer = new \Swift_Mailer();
        $surname=$user->getSurname();
        $message = (new \Swift_Message('Hello Email'))
            ->setFrom('biofutur@free.fr')
            ->setTo($user->getEmail())
            ->setBody(
                $this->renderView(
                    // templates/emails/registration.html.twig
                    'emails/registration.html.twig',
                    ['surname' => $surname]

                ),
                'text/html'
            )

            // you can remove the following code if you don't define a text version for your emails
            ->addPart(
                $this->renderView(
                    // templates/emails/registration.txt.twig
                    'emails/registration.txt.twig',
                    ['surname' => $surname]
                ),
                'text/plain'
            )
        ;

        $mailer->send($message);

    }

j'obtiens l'erreur suivante :
Too few arguments to function Swift_Mailer::__construct(), 0 passed in /home/johann/dev/biofutur/src/Controller/MailController.php on line 15 and exactly 1 expected

je sais qu'il attend un transport en argument (un serveur smtp) mais j'ai spécifié dans le swiftmailer.yaml la confid suivante :

swiftmailer:
    url: 'smtp.free.fr'
    spool: { type: 'memory' }

Pourquoi ne la prend t-il pas en compte et comment faire pour qu'il le fasse ?

Merci d'avance pour vos réponse :)

mappingException fatal error, class not found only in prod

$
0
0

Bonjour,

besoin d'un peu d'aide pour mon projet. merci.

Ce que je fais

J'utilise la V5 de Symfony, et je suis sur un projet qui nécéssite plusieurs base de données, cette façon de faire étant nouvelle pour moi j'ai suivi les indications de la doc de symfony pour mettre en place une connexion vers différentes bdd et pour créer les Entités, ainsi que les modifications à apporter au fichier doctrine.yaml; bref, tout se passait bien, jusqu'à ce que je passe en mode prod, là j'ai une erreur 500, normal lorsqu'on regarde les log, mais je ne comprends et n'arrive pas à résoudre, cette erreure ... elle parait simple au premier abords pourtant ..

Voici mon fichier doctrine.yaml :

doctrine:
    dbal:
        default_connection: customer
        connections:
            default:
                # configure these for your database server
                url: '%env(resolve:DATABASE_URL)%'
                server_version: '5.7'
                charset: utf8mb4
                mapping_types:
                    enum: string
            customer:
                # configure these for your database server
                url: '%env(DATABASE_Mo_URL)%'
                server_version: '5.7'
                charset: utf8mb4
                mapping_types:
                    enum: string

    orm:
        default_entity_manager: customer
        entity_managers:
            default:
                connection: default
                mappings:
                    Main:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/Main'
                        prefix: 'App\Entity\Main'
                        alias: Main
            customer:
                connection: customer
                mappings:
                    Mo:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/Mo'
                        prefix: 'App\Entity\Mo'
                        alias: Mo

Et maintenant la structure de mes fichiers (pour les entités)

project_name
    src
        Entity
            Main
                somes_entities
            Mo
                Agent.php (my User entity)
                somes_entities

Ce que je veux

Je voudrais faire dispara^tre cette erreure, merci de m'aider

Ce que j'obtiens

L'erreur dans le fichier log de symfony :

request.INFO: Matched route "agent_connexion". {"route":"agent_connexion","route_parameters":{"_route":"agent_connexion","_controller":"App\\Controller\\SecurityController::login"},"request_uri":"http://conge.local/connexion","method":"POST"} []
security.DEBUG: Checking for guard authentication credentials. {"firewall_key":"main","authenticators":1} []
security.DEBUG: Checking support on guard authenticator. {"firewall_key":"main","authenticator":"App\\Security\\LoginFormAuthenticator"} []
security.DEBUG: Calling getCredentials() on guard authenticator. {"firewall_key":"main","authenticator":"App\\Security\\LoginFormAuthenticator"} []
security.DEBUG: Passing guard token information to the GuardAuthenticationProvider {"firewall_key":"main","authenticator":"App\\Security\\LoginFormAuthenticator"} []
request.CRITICAL: Uncaught PHP Exception Doctrine\Persistence\Mapping\MappingException: "The class 'App\Entity\Mo\Agent' was not found in the chain configured namespaces App\Entity\Main" at D:\Programmation\CRNA\conge\vendor\doctrine\persistence\lib\Doctrine\Persistence\Mapping\MappingException.php line 23 {"exception":"[object] (Doctrine\\Persistence\\Mapping\\MappingException(code: 0): The class 'App\\Entity\\Mo\\Agent' was not found in the chain configured namespaces App\\Entity\\Main at D:\\Programmation\\CRNA\\conge\\vendor\\doctrine\\persistence\\lib\\Doctrine\\Persistence\\Mapping\\MappingException.php:23)"} []
Viewing all 1542 articles
Browse latest View live