2015-01-15 107 views
0

清理我的控制器代碼我想將「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; 
} 

回答

1

你只需要從服務返回數組並訪問值來自控制器。

UPDATE

需要你的代碼進行才能得到的東西的工作有些變化。

說明:當表單是有效的,以前的代碼(我刪除了)回到真正因此$ret["form_post"]沒有意義,因爲$ret不是一個數組。令我驚訝的是,它並沒有給你帶來錯誤。

無論如何,這可以解釋爲什麼教義沒有堅持你的實體。談到重定向,錯誤可能是由於相同的原因。 $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() 
    ); 
} 
+0

它不工作。無論如何,謝謝你的時間。然而,當我提交表單時,表單沒有傳遞給數據庫,也沒有被重定向。看來返回將它轉換爲一個簡單的字符串,我相信表單的內容會丟失。任何建議? – Garces

+0

@Garces謝謝,我已經更新了答案。 – acontell

相關問題