2015-01-15 2 views
0

Чтобы очистить код контроллера, я хочу переместить «newPostAction» в службу. Проблема, которую я получаю, заключается в том, что теперь я не могу передать в результате funtion в службе две переменные для контроллера. Я использую функцию для создания формы и получаю пулю из сообщения формы и визуализирую ее. Я не знаю, как передать его контроллеру. Я попробовал использовать функцию «список()», но она не получает информацию прав.

Как я могу вызвать «слизню» pos изнутри контроллера?

Вот код контроллера:

/** 
* @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