所以我正在构建一个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中做到这一点的建议?
答案 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;像它们一样的路线。