【问题标题】:Symfony2 pass two variables from the service to the Controller $slugSymfony2 将两个变量从服务传递给控制器​​ $slug
【发布时间】:2015-03-14 06:47:46
【问题描述】:

为了清理我的控制器代码,我想将“newPostAction”移动到服务中。我得到的问题是,由于服务中的功能,我现在无法将两个变量传递给控制器​​。我使用该函数创建一个表单,并从表单的帖子中获取 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()
    );
}

这里是创建新帖子实体的 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;
}

【问题讨论】:

    标签: forms symfony service controller slug


    【解决方案1】:

    您只需要从服务返回一个数组并从控制器访问值。

    更新

    需要对您的代码进行一些更改才能正常工作。

    说明:当表单有效时,前面的代码(我删除了它)返回 true,因此 $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()
        );
    }
    

    【讨论】:

    • 它不起作用。无论如何,谢谢你的时间。表单会显示,但是当我提交它时,数据不会传递到数据库,也不会被重定向。似乎返回将其转换为一个简单的字符串,并且我相信表单的内容丢失了。有什么建议吗?
    猜你喜欢
    • 2014-05-09
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多