1

Symfony ユーザー Varspool/WebsocketBundle で最初の WebSocket アプリケーションを実行しています。投票サーバー側のデータを挿入する必要があります。そのために、ユーザーが投票の回答を選択したときに DB にデータを挿入するコントローラーを作成しました。

このドキュメントに従ってください: http://symfony.com/doc/2.0/cookbook/controller/service.html「未定義メソッド forward() への呼び出し」エラーがあります。コントローラーではなくアプリケーションにいるためです

コントローラー内のカーネルの再起動や、次のような他の多くの奇妙なことなど、多くのことがわかります。

$kernel = new \AppKernel('dev', true);
$kernel->loadClassCache();
$kernel->boot();
$controller->setContainer($kernel->getContainer()); 

[編集] 「オブジェクト以外のメンバー関数 has() への呼び出し」 を表示する最後の試行を示します(oO はよくわかりません)。

サービスとしての私のコントローラー

Edit1 - __construct の更新

use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Krum\AGBundle\Application\ExempleApplication;
use Krum\AGBundle\Form\AGVoteSetType;
use Krum\AGBundle\Form\AGVoteAffichType;
use Krum\AGBundle\Form\AGVoteType;
use Krum\AGBundle\Entity\AGDummy;
use Krum\AGBundle\Entity\AGVote;
use Krum\AGBundle\Entity\AGReponse;
use Krum\AGBundle\Entity\AGScrutin;
use Krum\KBundle\Entity\Users;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\DependencyInjection\ContainerInterface;


class AGServicesController extends Controller {

    protected $em;    

    public function __construct($entityManager)
    {
        $this->entityManager = $entityManager;
    }




    public function get($service){           
        return $this->container->get($service);
    }

   public function voteeffective($vote, $reponse, $users) {
       $em = $this->em;
       $userbyFOS = $em->createQueryBuilder('u')
              ->select('u')
              ->from('KrumKBundle:Users', 'u')
              ->leftJoin('u.utilisateur', 'ut')
              ->where('ut.id = ?1')
              ->setParameter(1, $users)
              ->getQuery();
      $user = $userbyFOS->getOneOrNullResult();      
      $userstatus = $em->createQueryBuilder('scru')
              ->select('scru')
              ->from('KrumAGBundle:AGScrutin', 'scru')
              ->where('scru.users = ?1')
              ->andWhere('scru.AGVote = ?2')
              ->andWhere('scru.AGReponse = ?3')
              ->setParameters(array(
                      1 => $user,
                      2 => $vote,
                      3 => $reponse
                      ))
              ->getQuery();
       $stat = $userstatus->getResult();

      if ($stat == NULL) {
         $votety = $em->getRepository('KrumAGBundle:AGVote')->findOneById($vote);
         $reponsety = $em->getRepository('KrumAGBundle:AGReponse')->findOneById($reponse);

         $scrutinty = new AGScrutin();
         $scrutinty->setAGReponse($reponsety);
         $scrutinty->setAGVote($votety);
         $scrutinty->setUsers($user);
         $scrutinty->setType("AGScrutin");
         $em->persist($scrutinty);
         $em->flush();

         return "vote-ok:".$scrutinty->getId();
      } else {
         return "vote-false";
      }
    }  

}

マイ アプリケーション (WebSocket サーバー)

namespace Krum\AGBundle\Application;

use Varspool\WebsocketBundle\Application\Application;
use Varspool\WebsocketBundle\Application\NamedApplication;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use  Krum\AGBundle\Controller\AGServicesController;


class ExempleApplication extends Application {

   protected $clients = array();


   public function onData($data, $client) {
      foreach ($this->clients as $sendto) {
         $scrutin = (json_decode($data) != NULL) ? true : false;
             if ($scrutin == true ){   
                 $vote = $scrutin["AGVote"];
                 $reponse = $scrutin["AFreponse"] ;
                 $users = $scrutin["users"];
             $scrutinservice = new AGServicesController();
             $scrutinsend = $controller->voteeffective($vote, $reponse, $users);

             $sendto->send($scrutinsend);
              }
            }
     else
        $sendto->send($data);

   }
 }
}

私のconfig.yml

parameters:
    agservices.class:      Krum\AGBundle\Controller\AGServicesController

services :
  agservices:
    class : %agservices.class%
    arguments :
      container : "@service_container"

services.yml

編集1:sercices.yml構成

krum.agservices:
    class: Krum\AGBundle\Controller\AGServicesController    
    arguments: ["@doctrine.orm.default_entity_manager"]

すべての答えは、またはアイデアはかなりのものです!

見てくれてありがとう ;)

**編集1:今、私は別のExceptionErrorを持っています

警告: Krum\AGBundle\Controller\AGServicesController::__construct() の引数 1 がありません。/opt/lampp/htdocs/Krum/src/Krum/AGBundle/Application/ExempleApplication.php の 62 行目で呼び出され、/opt/ で定義されています。 lampp/htdocs/Krum/src/Krum/AGBundle/Controller/AGServicesController.php 34行目*

私は、services.yml が自動的に正しいドクトリン エンティティ マネージャーをパラメーターに追加する必要があると考えました。または、パラメーターのタイプを指定するだけで、コントローラーを呼び出すときに手動で追加する必要がありますか?

4

0 に答える 0