私はニュースレターの購読物を稼働させる必要があります。私が使用しているロジックは、ユーザーが自分の電子メールを送信するときです。私は、既に電子メールでサイトに登録されているユーザーがいるかどうかを確認します。はいの場合は、彼がニュースレターを購読していて、適切な購読をしているかどうかを確認します。電子メールが登録ユーザーリストにない場合、私は匿名ユーザーのためのニュースレターテーブルを持っています。彼が購読しているかどうかを確認し、必要な措置を講じる。私は、このコントローラのアクションを呼び出すために、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を使用しています。これは問題を引き起こしていますか?それを実装する最良の方法は何ですか?
ありがとうございます!
サンキュー:あなたのsecurity.ymlファイルで
は、のような何かを追加します!出来た。 – VishwaKumar
ねえ。 2000人以上の担当者を押し込んだ。ありがとう。 – Cerad