Php 我应该把代码放在哪里来简化控制器?
我的例子很简单。我有用户。他们可以提交想法。其他人都可以用积分支持这些想法。当一个用户想要支持一个想法时,我需要检查他是否有足够的信用,等等。我应该把这个代码放在哪里Php 我应该把代码放在哪里来简化控制器?,php,symfony,Php,Symfony,我的例子很简单。我有用户。他们可以提交想法。其他人都可以用积分支持这些想法。当一个用户想要支持一个想法时,我需要检查他是否有足够的信用,等等。我应该把这个代码放在哪里 /** * @Route("/support/{ideaSlug}", name="support_new") */ public function newAction(Request $request, $ideaSlug) { $support = new Support(); $form = $this-&g
/**
* @Route("/support/{ideaSlug}", name="support_new")
*/
public function newAction(Request $request, $ideaSlug)
{
$support = new Support();
$form = $this->createForm(SupportType::class, $support);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $this->getUser();
if($user->getCredit() > 0) {
$idea = $this->getDoctrine()->getRepository('AppBundle:Idea')->findOneBy(['slug' => $ideaSlug]);
$em = $this->getDoctrine()->getManager();
$em->persist($support);
$em->flush();
}
return $this->redirect($this->generateUrl('support_index'));
}
return $this->render('support/new.html.twig', [
'form' => $form->createView()
]);
}
我是否需要用户服务如:
namespace AppBundle\Utils;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use AppBundle\Entity\Idea;
class User
{
protected $em;
protected $user;
public function __construct(EntityManager $em, TokenStorage $tokenStorage)
{
$this->em = $em;
$this->$user = $tokenStorage->getToken()->getUser();
}
public support(Idea $idea)
{
....
}
}
或者我是否将其放在实体类中?无法真正将其放在实体中,因为该实体无权访问实体管理器。您的用户支持服务可能是您最好的选择。您可以考虑一个自定义验证器(您需要的是验证)。当然,您可以在服务中解耦登录,并在自定义应用程序中使用它constraint@Matteo这是一个很好的论点。除非信用检查通过,否则该表格不应视为有效。在这一点上,它将成为一个简单的持久化。我将尝试使用自定义验证器。可能只是使用voter…无法真正将其放入实体中,因为实体无法访问实体管理器。您的用户支持服务可能是您最好的选择。您可以考虑一个自定义验证器(您需要的是验证)。当然,您可以在服务中解耦登录,并在自定义应用程序中使用它constraint@Matteo这是一个很好的论点。除非信用检查通过,否则该表格不应视为有效。在这一点上,它将成为一个简单的持久化。我将尝试使用一个自定义验证器。也许只是使用投票者。。。