2016-06-16 3 views
0

Ich möchte den Controller in Übereinstimmung mit der Philosophie von "symfony" reduzieren. Vielleicht muss ich die Dienste nutzen oder etwas zum Standard haben?Wo kann ich den Code "save to database" platzieren, der sich in der Steuerung befindet

Hier ist meine Funktion

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use AppBundle\Entity\Users; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Symfony\Component\HttpFoundation\Request; 
... 
/** 
* @Route("/save", name="save") 
* @Method({"GET"}) 
* @return Response 
*/ 
public function saveAction() 
{ 
    //returns an array of users on this date 
    //array(
    // "Kate" => 18, 
    // "John" => 24, 
    // "Albert" => 31, 
    //); 
    $users= $this->get("users")->users(); 

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

    $checkNow = $this->getDoctrine() 
      ->getRepository('AppBundle:User') 
      ->findOneBy(array("date" => $this->nowDate)); 

    if(null === $checkNow) { 
     foreach($users as $name => $qty) { 
      $userDB = new User(); 
      $userDB->setDate($this->nowDate); 
      $userDB->setQty($qty); 
      $userDB->setName($name); 
      $em->persist($userDB); 
     } 

     $em->flush(); 
    } 

    return new Response("New users are added"); 
} 

Vielen Dank im Voraus.

+0

Sie besser einige Beispiele durch in hier: http://www.inzzzz.com/index.php/posts/symfony – BentCoder

+0

BentCoder Vielen Dank für den Link – user3771955

Antwort

0

Symfony ist nur ein Framework und erlaubt alles, aber im Allgemeinen wird Datenbank-bezogenes Zeug in einem EntityRepository erstellt. Normalerweise behalte ich EntityRepositories für komplexe Abfragen oder Datenbankoperationen.

Sie einen Dienst haben können Ihre Controller schlank zu halten, etwa so:

Beispiel Controller-Aktion:

$users= $this->get("users")->users(); 
$userService = $this->get('user.service'); 

if (!$userService->hasUsersCreatedOn($this->nowDate) { 
    $userService->createMultiple($users); 
} 

return 'message'; 

Beispielbenutzerservice:

public function createMultiple($users); // just loops through each and creates 

public function create($name, $qty, $date) { 
    $user = new User(); 
    $user->setDate($this->nowDate); 
    $user->setQty($qty); 
    $user->setName($name); 

    $this->entityManager->persist($user); 
    $this->entityManager->flush($user); 

    return $user; 
} 
+0

mickadoo Vielen Dank für Ihre Hilfe – user3771955

+0

@ user3771955 Nein p Problem (normalerweise Leute Upvote/akzeptieren hilfreiche Antworten) – mickadoo

Verwandte Themen