我有一個摘要CRUDController
延伸Controller
。在我newAction
,OS能否取得成功,我想用redirect
方法來重定向到showAction($slug)
:Symfony2如何重定向到沒有硬編碼路由名稱的操作?
return $this->redirect($this->generateUrl($route, $params));
但newAction
是實際上是調用子類中的UserController
,所以我不能在我的CRUDController
指定路線名稱$route
。
class UserController extends CRUDController { }
abstract class CRUDController extends Controller
{
/** @Template */
public function showAction($slug) { }
/** @Template */
public function newAction(Request $request)
{
$model = $this->createModel();
$form = $this->createForm($this->createType(), $model);
if('GET' == $request->getMethod())
return array('form' => $form->createView());
$form->bindRequest($request);
if(!$form->isValid()) return array(
'errors' => $this->get('validator')->validate($model),
'form' => $form->createView()
);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($model);
$em->flush();
// Success, redirect to showAction($slug)
}
}
路線的一個例子:
users_show:
pattern: /users/show/{slug}
defaults: { _controller: AcmeSecurityBundle:User:show }
requirements:
_method: GET
users_new:
pattern: /users/new
defaults: { _controller: AcmeSecurityBundle:User:new }
requirements:
_method: GET
users_create:
pattern: /users/new
defaults: { _controller: AcmeSecurityBundle:User:new }
requirements:
_method: POST
感謝您的回答,即使它很明顯。如果你看看代碼,你會發現我正在用'createModel()'和'createType()'(它們是抽象的)的方法做同樣的事情。但是隨着路線......改變它也會迫使你改變'getRoute',所以我放棄了這個想法。不管怎麼說,還是要謝謝你。 – gremo 2012-03-15 18:53:20
我想你必須返回 - >「return $ this-> redirect();」 – 2014-03-20 12:09:35