Symfony控制器:重定向,路由或其他什么?

时间:2015-05-30 12:30:14

标签: php symfony

所以我正在构建一个Symfony网络应用程序。

我有一个简单的控制器(DefaultController.php),如下所示:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
  /**
  * @Route("/", name="default")
  */
  public function defaultAction(){
    return $this->render('default/hello.html.twig', array(
      'name' => "hello"
    ));
  }
}

没什么特别的。

现在,我希望有一个名为APIController.php的单独.php文件,当用户导航到http://eamorr.com/api/

时会调用该文件 然后

APIController.php将处理以下请求:

以下是APIController.php的样子:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class APIController extends Controller
{
    /**
     * @Route("/getUser", name="getUser")
     */
    public function getUser(){
        //
    }

    /**
     * @Route("/addUser", name="addUser")
     */
    public function addUser(){
        //
    }

    /**
     * @Route("/getAllUsers", name="getAllUsers")
     */
    public function getAllUsers(){
        //
    }

    //etc.


}

从架构的角度来看,我这样做了吗?有没有人有任何关于如何在Symfony中做到这一点的建议?

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。但是,如果您希望支持多种请求和响应格式(例如JSON,XML),最好使用FOSRestBundle

它可以处理内容协商,实体序列化(使用FOSRest Bundle使用的JMSSerializerBundle),并且它可以构建RESTful路由。

答案 1 :(得分:2)

如果您定义以下路线:

/**
 * @Route("/getUser", name="getUser")
 */
public function getUser(){
    //
}

然后,此操作的网址将为http://eamorr.com/getUser。你可以看到没有/api部分,这是因为你没有在任何地方提及它。

对于这种情况,您有两种解决方案。

首先要定义像

这样的完整路线
/**
 * @Route("/api/getUser", name="getUser")
 */
public function getUser(){
    //
}

第二:既然你希望所有APIController行动都有/api部分,你可以通过定义&#34; base&#34;来定义所有路线的前缀。全班的路线。

/**
 * @Route("/api", name="getUser")
 */
 class APIController extends Controller

然后你可以离开你的行动&#39;像它们一样的路线。

更多信息:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html#route-prefix