Symfony2 将两个变量从服务传递给控制器 $slug
Symfony2 pass two variables from the service to the Controller $slug
为了清理我的控制器代码,我想将 "newPostAction" 移动到服务中。我遇到的问题是,由于服务中的函数,现在我无法将两个变量传递给控制器。我使用该函数创建一个表单,然后从表单的 post 中获取 slug 并呈现它。我不知道如何将它传递给控制器。我尝试使用 "list()" 函数,但它没有得到正确的信息。
如何从控制器内部调用 pos 的 "slug"?
控制器代码如下:
/**
* @param Request $request
* @return array
*
* @Route("/new/_post", name="_blog_backend_post_new")
* @Template("BlogBundle:Backend/Post:new.html.twig")
*/
public function newPostAction(Request $request)
{
$form_post = $this->getPostManager()->createPost($request);
$slug_post = ¿How do I get it from inside the createPost()?;
if (true === $form_post)
{
$this->get('session')->getFlashBag()->add('success', 'Your post was submitted successfully');
return $this->redirect($this->generateUrl('blog_blog_post_show', array('slug' => $slug_post)));
}
return array(
'post_slug' => $slug_post,
'form_post' => $form_post->createView()
);
}
这是创建新 post 实体的 PostManager 服务:
/**
* Create and validate a new Post
*
* @param Request $request
* @return bool|FormInterface
*/
public function createPost (Request $request)
{
$post = new Post();
$post->setAuthor($this->um->getloggedUser());
$form_post = $this->formFactory->create(new PostType(), $post);
$form_post->handleRequest($request);
$slug_post = $post->getSlug();
if ($form_post->isValid())
{
$this->em->persist($post);
$this->em->flush();
return true;
}
return $form_post;
}
您只需要 return 来自服务的数组并访问来自控制器的值。
更新
需要对您的代码进行一些更改才能正常工作。
解释:当表单有效时,之前的代码(我删除了它)return为真因此$ret["form_post"]
没有意义因为$ret
不是数组。令我惊讶的是它没有抛出错误。
无论如何,这可以解释为什么 Doctrine 没有持久化您的实体。谈到重定向,错误可能是由于相同的原因造成的。 $ret
为真(布尔值),$ret["form_slug"]
也没有意义。
我希望这能解决问题。请让我知道它是否有效。
服务
public function createPost (Request $request)
{
$post = new Post();
$post->setAuthor($this->um->getloggedUser());
$form_post = $this->formFactory->create(new PostType(), $post);
$form_post->handleRequest($request);
$slug_post = $post->getSlug();
if ($form_post->isValid())
{
$this->em->persist($post);
$this->em->flush();
return array("form_post" => true, "slug_post" => $slug_post);;
}
return array("form_post" => $form_post, "slug_post" => $slug_post);
}
控制器:
public function newPostAction(Request $request)
{
$ret = $this->getPostManager()->createPost($request);
$form_post = $ret["form_post"];
$slug_post = $ret["slug_post"];
if (true === $form_post)
{
$this->get('session')->getFlashBag()->add('success', 'Your post was submitted successfully');
return $this->redirect($this->generateUrl('blog_blog_post_show', array('slug' => $slug_post)));
}
return array(
'post_slug' => $slug_post,
'form_post' => $form_post->createView()
);
}
为了清理我的控制器代码,我想将 "newPostAction" 移动到服务中。我遇到的问题是,由于服务中的函数,现在我无法将两个变量传递给控制器。我使用该函数创建一个表单,然后从表单的 post 中获取 slug 并呈现它。我不知道如何将它传递给控制器。我尝试使用 "list()" 函数,但它没有得到正确的信息。
如何从控制器内部调用 pos 的 "slug"?
控制器代码如下:
/**
* @param Request $request
* @return array
*
* @Route("/new/_post", name="_blog_backend_post_new")
* @Template("BlogBundle:Backend/Post:new.html.twig")
*/
public function newPostAction(Request $request)
{
$form_post = $this->getPostManager()->createPost($request);
$slug_post = ¿How do I get it from inside the createPost()?;
if (true === $form_post)
{
$this->get('session')->getFlashBag()->add('success', 'Your post was submitted successfully');
return $this->redirect($this->generateUrl('blog_blog_post_show', array('slug' => $slug_post)));
}
return array(
'post_slug' => $slug_post,
'form_post' => $form_post->createView()
);
}
这是创建新 post 实体的 PostManager 服务:
/**
* Create and validate a new Post
*
* @param Request $request
* @return bool|FormInterface
*/
public function createPost (Request $request)
{
$post = new Post();
$post->setAuthor($this->um->getloggedUser());
$form_post = $this->formFactory->create(new PostType(), $post);
$form_post->handleRequest($request);
$slug_post = $post->getSlug();
if ($form_post->isValid())
{
$this->em->persist($post);
$this->em->flush();
return true;
}
return $form_post;
}
您只需要 return 来自服务的数组并访问来自控制器的值。
更新
需要对您的代码进行一些更改才能正常工作。
解释:当表单有效时,之前的代码(我删除了它)return为真因此$ret["form_post"]
没有意义因为$ret
不是数组。令我惊讶的是它没有抛出错误。
无论如何,这可以解释为什么 Doctrine 没有持久化您的实体。谈到重定向,错误可能是由于相同的原因造成的。 $ret
为真(布尔值),$ret["form_slug"]
也没有意义。
我希望这能解决问题。请让我知道它是否有效。
服务
public function createPost (Request $request)
{
$post = new Post();
$post->setAuthor($this->um->getloggedUser());
$form_post = $this->formFactory->create(new PostType(), $post);
$form_post->handleRequest($request);
$slug_post = $post->getSlug();
if ($form_post->isValid())
{
$this->em->persist($post);
$this->em->flush();
return array("form_post" => true, "slug_post" => $slug_post);;
}
return array("form_post" => $form_post, "slug_post" => $slug_post);
}
控制器:
public function newPostAction(Request $request)
{
$ret = $this->getPostManager()->createPost($request);
$form_post = $ret["form_post"];
$slug_post = $ret["slug_post"];
if (true === $form_post)
{
$this->get('session')->getFlashBag()->add('success', 'Your post was submitted successfully');
return $this->redirect($this->generateUrl('blog_blog_post_show', array('slug' => $slug_post)));
}
return array(
'post_slug' => $slug_post,
'form_post' => $form_post->createView()
);
}