2012-04-10 8 views
1

私はニュースレターの購読物を稼働させる必要があります。私が使用しているロジックは、ユーザーが自分の電子メールを送信するときです。私は、既に電子メールでサイトに登録されているユーザーがいるかどうかを確認します。はいの場合は、彼がニュースレターを購読していて、適切な購読をしているかどうかを確認します。電子メールが登録ユーザーリストにない場合、私は匿名ユーザーのためのニュースレターテーブルを持っています。彼が購読しているかどうかを確認し、必要な措置を講じる。私は、このコントローラのアクションを呼び出すために、AJAXを使用していますSymfony2:ニュースレターの購読

/** 
* @Route("/newsletter/", name="site_newsletter") 
* @return array 
*/ 
public function newsletterSubscriptionAction(httpRequest $request) 
{ 
    $email = $request->request->get('email'); 

    try { 

     $email = $request->request->get('email'); 
     $em = $this->getDoctrine()->getEntityManager(); 
     $query = $em->createQuery(
      'SELECT u FROM MyBundle:User u WHERE u.email = :email' 
     )->setParameter('email', $email); 

     $user = $query->getSingleResult(); 

     if(!is_object($user)){ //this means anonymous user not registered to site 
      $em = $this->getDoctrine()->getEntityManager(); 
      $query = $em->createQuery(
       'SELECT n FROM MyBundle:Newsletter n WHERE n.email = :email AND n.isSubscribed = 1' 
      )->setParameter('email', $email); 

      $record = $query->getSingleResult(); 

      if($record){ 
       $msg = "You are already subscribed!"; 
      }else{ 
       $newsletter = new Newsletter(); 
       $newsletter->setEmail($email); 
       $newsletter->setIsSubscribed(true); 

       $em = $this->getDoctrine()->getEntityManager(); 
       $em->persist($newsletter); 
       $em->flush(); 

       $msg = "You have been subscribed to our newsletter! Thank You."; 
      } 
     }else{ 
      if($user->getNewsletterSubscription()){ 
       $msg = "You are already subscribed!"; 
      }else{ 
       $user->setNewsletterSubscription(1); 
       $em = $this->getDoctrine()->getEntityManager(); 
       $em->flush();      
       $msg = "You have been subscribed to our newsletter! Thank You."; 
      }     
     } 

    } 
    catch (\Exception $e) { 
     $msg = 'Some problem occured. Please try again later'; 
    } 

    if ($this->getRequest()->isXmlHttpRequest()) { 
     return new \Symfony\Component\HttpFoundation\Response($msg); 
     return array('msg' => $msg); 
    } 

} 

は、ここに私のコントローラのアクションコードです。これは動作していません。 ajaxに戻ってくるデータmはリダイレクトされたログインページです。

私はユーザーを管理するためにFOSUSerBundleを使用しています。これは問題を引き起こしていますか?それを実装する最良の方法は何ですか?

ありがとうございます!

答えて

2

あなたはサブスクリプションルートを使用する許可をanonユーザーに与える必要があるように思えます。

security: 
    access_control: 
     - { path: ^/subscribe, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
+0

サンキュー:あなたのsecurity.ymlファイルで

は、のような何かを追加します!出来た。 – VishwaKumar

+0

ねえ。 2000人以上の担当者を押し込んだ。ありがとう。 – Cerad

関連する問題