Partage
  • Partager sur Facebook
  • Partager sur Twitter

Logique métier Symfony 3

Métier ? existant ou inexistant ? a vous de voir

Sujet résolu
    21 février 2017 à 21:35:22

    Je suis un étudiant en informatique, un projet nous a été assigné qui consistait à développer une application web avec Symfony 3.

    Lors de la validation de mon travail concernant le projet on m'a reproché de ne pas avoir un métier, perplexe quand je suis sortie j'ai effectué une recherche sur internet pour vérifier si mon travail incluait un métier et il s'est avéré que c'était le cas, donc j'aimerais poster le code source de mes contrôleurs et mes entités à fin d'avoir un second avis de votre part.

    Merci ... 
     

    <?php
    
    namespace SocialPro\ProjectBundle\Controller;
    
    use CMEN\GoogleChartsBundle\GoogleCharts\Charts\BarChart;
    use CMEN\GoogleChartsBundle\GoogleCharts\Charts\Histogram;
    use CMEN\GoogleChartsBundle\GoogleCharts\Charts\PieChart;
    use SocialPro\ProjectBundle\Entity\Projet;
    use SocialPro\ProjectBundle\Entity\TrackProject;
    use SocialPro\ProjectBundle\Form\ProjetType;
    use SocialPro\ProjectBundle\Form\TrackProjectType;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    
    class ProjectController extends Controller
    {
    
        public function controleAction($cp)
        {
           
            $repository = $this->getDoctrine()->getManager()->getRepository('ProjectBundle:Projet');
            $query = $repository->createQueryBuilder('p')
                ->where('p.nom LIKE :nom')
                ->setParameter('nom', $cp.'%')
                ->getQuery();
    
            $products = $query->getResult();
    
            if($products){
                $i=0;
                foreach ($products as $p){
    
                    $nom[0][$i] = $p->getNom();
                    $nom[1][$i] = $p->getDescription();
                    $nom[2][$i] = $p->getId();
                    $i++;
    
                }
    
            }
    
            else{
                $nom=null;
                }
            $response = new JsonResponse();
            return $response->setData(array('nom'=>$nom));
    
        }
    
    
        public function indexAction(Request $request)
        {
    
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $listProjects = $repository->findAll();
    
            /**
             * @var $paginator \Knp\Component\Pager\Paginator
             */
            $paginator = $this->get('knp_paginator');
            $result = $paginator->paginate(
                $listProjects,
                $request->query->getInt('p',1),
                $request->query->getInt('limit',3)
            );
    
            return $this->render('ProjectBundle:Project:index.html.twig',array(
                'project' => $result,
            ));
        }
    
        public function listAction(Request $request)
        {
    
            $session = $this->getUser();
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $listProjects = $repository->findByUser($session);
    
            /**
             * @var $paginator \Knp\Component\Pager\Paginator
             */
            $paginator = $this->get('knp_paginator');
            $result = $paginator->paginate(
                $listProjects,
                $request->query->getInt('p',1),
                $request->query->getInt('limit',3)
            );
    
            return $this->render('ProjectBundle:Project:liste.html.twig',array(
                'project' => $result,
            ));
        }
    
        public function addAction(Request $request)
        {
            $project = new Projet();
            $form = $this->createForm(ProjetType::class,$project);
            if ($form->handleRequest($request)->isValid()) {
    
            if ($form->isSubmitted()) {
    
                $recaptcha = new \ReCaptcha\ReCaptcha("6LcwvxQUAAAAAG23hLKAGr5SwsKPycNKGqftLDSa");
                $resp = $recaptcha->verify($_POST['g-recaptcha-response']);
                if ($resp->isSuccess()) {
                    $session = $this->getUser();
                    $project->setUser($session);
                    $project->setStatus(1);
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($project);
                    $em->flush();
                    return $this->redirectToRoute("project_myproject");
                } else {
                    $errors = $resp->getErrorCodes();
    
                }
    
                $formView = $form->createView();
                return $this->render('@Project/Project/ajout.html.twig',array('form' => $formView));
    
            }
    
            }
    
            $formView = $form->createView();
    
            return $this->render('@Project/Project/ajout.html.twig',array('form' => $formView));
        }
    
    
        public function foundsAction(Request $request,$id)
        {
    
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $project = $repository->find($id);
    
            $trackProject = new TrackProject();
            $form = $this->createForm(TrackProjectType::class,$trackProject);
            if($form->handleRequest($request)->isValid()) {
    
                if ($form->isSubmitted()) {
    
                    $repositoryTrack = $this
                        ->getDoctrine()
                        ->getManager()
                        ->getRepository('ProjectBundle:TrackProject');
    
                        $session = $this->getUser();
                        $trackProject->setProject($project);
                        $trackProject->setUser($session);
                        $em = $this->getDoctrine()->getManager();
                        $em->persist($trackProject);
                        $em->flush();
                        //var_dump($em);
                    $criteria = array("project" => $id);
                    $trackProject = $repositoryTrack->findBy($criteria);
                    //var_dump($trackProject);
                    $donnation=0;
                    foreach ($trackProject as $track) {
                        $donnation+=$track->getMontant();
                    }
    
                    return $this->render('ProjectBundle:Project:choix.html.twig',array(
                        'project' => $project,'montant' => $donnation
                    ));
    
    
                }
    
            }
    
            $formView = $form->createView();
    
    
    
    
            return $this->render('@Project/Project/founds.html.twig',array('form' => $formView,
                'project' => $project));
        }
    
        public function searchAction($id)
        {
            return $this->render();
        }
    
    
        public function selectAction($id)
        {
    
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $project = $repository->find($id);
    
                $repositoryTrack = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:TrackProject');
            //$ex=$project->getId();
            $criteria = array("project" => $project,);
            $trackProject = $repositoryTrack->findBy($criteria);
            //$trackProject = $repositoryTrack->findBy(array('project_id' => $project->getId()));
            $donnation=0;
            foreach ($trackProject as $track) {
                $donnation+=$track->getMontant();
            }
    
            return $this->render('ProjectBundle:Project:choix.html.twig',array(
                'project' => $project,'montant' => $donnation
            ));
        }
    
        public function editAction(Request $request, Projet $project)
        {
            if ($this->getUser()->getId()==$project->getUser()->getId()){
            $form = $this->createForm(ProjetType::class,$project);
            if($form->handleRequest($request)->isValid()){
            if ($form->isSubmitted()) {
                $em = $this->getDoctrine()->getManager();
    			$em->flush();
                return $this->redirectToRoute("project_myproject");
    
            }
            }
    
            $formView = $form->createView();
    
            return $this->render('@Project/Project/modifier.html.twig',array('form' => $formView));
        }
    
            return $this->redirectToRoute("project_homepage");
        }
    
        public function statistiquesAction()
        {
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $listProjects = $repository->findAll();
                $a=0;
                $b=0;
                $c=0;
                $d=0;
                $f=0;
            foreach ($listProjects as $project) {
                // $advert est une instance de Advert
                $cout=$project->getCout();
    
                if($cout>0&&$cout<20000){
                    $a+=1;
                }
                else if($cout>=20000&&$cout<50000){
                    $b+=1;
                }
                else if($cout>=50000&&$cout<200000){
                    $c+=1;
                }
                else if($cout>=200000&&$cout<500000){
                    $d+=1;
                }
                else if($cout>=500000){
                    $f+=1;
                }
    
            }
    
            $pieChart = new PieChart();
            $pieChart->getData()->setArrayToDataTable(
                [['Task', 'Hours per Day'],
                    ['<20000€',     $a],
                    ['20000-49000€',      $b],
                    ['50000-199000€',  $c],
                    ['200000-499000€', $d],
                    ['>500000€',    $f]
                ]
            );
            $pieChart->getOptions()->setTitle('Classement des Projets par tranche de coût');
            $pieChart->getOptions()->setHeight(500);
            //$pieChart->getOptions()->setWidth(900);
            $pieChart->getOptions()->getTitleTextStyle()->setBold(true);
            $pieChart->getOptions()->getTitleTextStyle()->setColor('#009900');
            $pieChart->getOptions()->getTitleTextStyle()->setItalic(true);
            $pieChart->getOptions()->getTitleTextStyle()->setFontName('Arial');
            $pieChart->getOptions()->getTitleTextStyle()->setFontSize(20);
    
    
            return $this->render('ProjectBundle:Project:Statistiques.html.twig', array('piechart' => $pieChart));
        }
    
        public function statDomaineAction()
        {
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $listProjects = $repository->findAll();
            $a = 0;
            $b = 0;
            $c = 0;
            $d = 0;
            $e = 0;
            $f = 0;
            $g = 0;
            $h = 0;
            foreach ($listProjects as $project) {
                
                $cout = $project->getDomaine();
    
                if ($cout=="Informatique") {
                    $a += 1;
                } else if ($cout=="Telecommunication") {
                    $b += 1;
                } else if ($cout=="GeniCivil") {
                    $c += 1;
                } else if ($cout=="Mathematique") {
                    $d += 1;
                } else if ($cout=="Physique") {
                    $e += 1;
                }else if ($cout=="Mecanique") {
                    $f += 1;
                }else if ($cout=="Electronique") {
                    $g += 1;
                }else if ($cout=="Autre") {
                    $h += 1;
                }
    
            }
    
            $bar = new BarChart();
            $bar->getData()->setArrayToDataTable([
                ['Domaine', 'Nombre de projets'],
                ['Informatique', $a],
                ['Telecommunication', $b],
                ['GeniCivil', $c],
                ['Mathematique', $d],
                ['Physique', $e],
                ['Mecanique', $f],
                ['Electronique', $g],
                ['Autre', $h]
            ]);
            $bar->getOptions()->setTitle('Classement des projets par domaine');
            $bar->getOptions()->getHAxis()->setTitle('Classement des projets par domaine');
            $bar->getOptions()->getHAxis()->setMinValue(0);
            $bar->getOptions()->getVAxis()->setTitle('projects');
            //$bar->getOptions()->setWidth(900);
            $bar->getOptions()->setHeight(500);
    
            return $this->render('ProjectBundle:Project:StatDomaine.html.twig', array('piechart' => $bar));
    
        }
    
        public function adminProjectAction(Request $request)
        {
    
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $listProjects = $repository->findAll();
    
            /**
             * @var $paginator \Knp\Component\Pager\Paginator
             */
            $paginator = $this->get('knp_paginator');
            $result = $paginator->paginate(
                $listProjects,
                $request->query->getInt('p',1),
                $request->query->getInt('limit',20)
            );
            //var_dump($result);
            return $this->render('ProjectBundle:Admin:AdminProject.html.twig',array('project'=>$result));
    
        }
    
        public function adminProjectSupprimerAction($id)
        {
            $em = $this->getDoctrine()->getManager();
            $entity = $em->getRepository('ProjectBundle:Projet')->findOneBy(array('id' => $id));
    
            if ($entity != null){
                $em->remove($entity);
                $em->flush();
            }
    
            return $this->redirectToRoute("project_admin");
        }
    
        public function adminProjectConsulterAction($id)
        {
    
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:Projet');
    
            $project = $repository->find($id);
    
            $repositoryTrack = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectBundle:TrackProject');
            //$ex=$project->getId();
            $criteria = array("project" => $project,);
            $trackProject = $repositoryTrack->findBy($criteria);
            //$trackProject = $repositoryTrack->findBy(array('project_id' => $project->getId()));
            $donnation=0;
            foreach ($trackProject as $track) {
                $donnation+=$track->getMontant();
            }
    
            return $this->render('ProjectBundle:Admin:AdminConsultProject.html.twig',array(
                'project' => $project,'montant' => $donnation
            ));
    
        }
    
    }
    <?php
    
    namespace SocialPro\ProjectBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use SocialPro\UserBundle\Entity\User;
    use Symfony\Component\Validator\Constraints as Assert;
    
    /**
     * Projet
     *
     * @ORM\Table(name="projet")
     * @ORM\Entity(repositoryClass="SocialPro\ProjectBundle\Repository\ProjetRepository")
     */
    class Projet
    {
        /**
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @ORM\ManyToOne(targetEntity="SocialPro\UserBundle\Entity\User")
         */
        private $user;
    
        /**
         * @ORM\Column(name="nom", type="string", length=100)
         */
        private $nom;
    
        /**
         * @ORM\Column(name="description", type="string", length=255)
         */
        private $description;
    
    
        /**
         * @ORM\Column(name="cout", type="float")
         * @Assert\Range(
         *      min = 1000,
         *      max = 999999999,
         *      minMessage = "the cost of your project must be at least {{ limit }}€ to be submitted",
         *      maxMessage = "the cost of your project must be at most than {{ limit }}€ to be submitted"
         * )
         */
        private $cout;
    
        /**
         * @ORM\Column(name="domaine", type="string", length=255)
         */
        private $domaine;
    
        /**
         * @ORM\Column(name="status", type="integer")
         */
        private $status;
    
        /**
         * @return mixed
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * @param mixed $id
         */
        public function setId($id)
        {
            $this->id = $id;
        }
    
        /**
         * @return mixed
         */
        public function getUser()
        {
            return $this->user;
        }
    
        /**
         * @param mixed $user
         */
        public function setUser(User $user)
        {
            $this->user = $user;
        }
    
        /**
         * @return mixed
         */
        public function getNom()
        {
            return $this->nom;
        }
    
        /**
         * @param mixed $nom
         */
        public function setNom($nom)
        {
            $this->nom = $nom;
        }
    
        /**
         * @return mixed
         */
        public function getDescription()
        {
            return $this->description;
        }
    
        /**
         * @param mixed $description
         */
        public function setDescription($description)
        {
            $this->description = $description;
        }
    
        /**
         * @return mixed
         */
        public function getCout()
        {
            return $this->cout;
        }
    
        /**
         * @param mixed $cout
         */
        public function setCout($cout)
        {
            $this->cout = $cout;
        }
    
        /**
         * @return mixed
         */
        public function getDomaine()
        {
            return $this->domaine;
        }
    
        /**
         * @param mixed $domaine
         */
        public function setDomaine($domaine)
        {
            $this->domaine = $domaine;
        }
    
        /**
         * @return mixed
         */
        public function getStatus()
        {
            return $this->status;
        }
    
        /**
         * @param mixed $status
         */
        public function setStatus($status)
        {
            $this->status = $status;
        }
    
    
    }
    
    
    <?php
    
    namespace SocialPro\ProjectBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use SocialPro\UserBundle\Entity\User;
    use Symfony\Component\Validator\Constraints as Assert;
    
    /**
     * TrackProject
     *
     * @ORM\Table(name="track_project")
     * @ORM\Entity(repositoryClass="SocialPro\ProjectBundle\Repository\TrackProjectRepository")
     */
    class TrackProject
    {
        /**
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @ORM\ManyToOne(targetEntity="SocialPro\ProjectBundle\Entity\Projet")
         */
        private $project;
    
        /**
         * @ORM\ManyToOne(targetEntity="SocialPro\UserBundle\Entity\User")
         */
        private $user;
    
        /**
         * @ORM\Column(name="montant", type="float")
         * @Assert\Range(
         *      min = 1,
         *      max = 999999999,
         *      minMessage = "the minimum donation must be at least {{ limit }}€",
         *      maxMessage = "the maximum donation must be at most {{ limit }}€"
         * )
         */
        private $montant;
    
        /**
         * @return mixed
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * @param mixed $id
         */
        public function setId($id)
        {
            $this->id = $id;
        }
    
        /**
         * @return mixed
         */
        public function getProject()
        {
            return $this->project;
        }
    
        /**
         * @param mixed $project
         */
        public function setProject(Projet $project)
        {
            $this->project = $project;
        }
    
        /**
         * @return mixed
         */
        public function getUser()
        {
            return $this->user;
        }
    
        /**
         * @param mixed $user
         */
        public function setUser(User $user)
        {
            $this->user = $user;
        }
    
        /**
         * @return mixed
         */
        public function getMontant()
        {
            return $this->montant;
        }
    
        /**
         * @param mixed $montant
         */
        public function setMontant($montant)
        {
            $this->montant = $montant;
        }
    
    
    }
    
    




     

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2017 à 21:39:38

      Le problème qui se pose c'est que tu fais tes vérifications si $nom est null au niveau du controller voir même tes foreach.

      Avec twig(dans tes views) tu peux faire ça, ça évite de trop charger tes controller.

      Après tes entity on s'en "fou" car c'est géré.

      • Partager sur Facebook
      • Partager sur Twitter
      Etudiant en deuxième année de BTS en développement. Accepté à la MIAGE de Rennes 2017
        22 février 2017 à 17:57:09

        La logique métier se trouve dans tes contrôleurs ; c'est probablement ça qu'on t'a reproché. Typiquement on centralise les requêtes dans des classes Repository par exemple, et on créé des services pour le reste. Accessoirement il faut tester si un formulaire est soumis avant de tester s'il est valide.
        • Partager sur Facebook
        • Partager sur Twitter
        Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.

        Logique métier Symfony 3

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown