官方文档http://symfony.com/doc/current/book/controller.html
控制器;
这个不多说;和其他控制差不多;
sf2入口文件(app.php/app_dev.php 一个生产环境一个是开发环境)
sf2控制器最后的结果都是要返回一个Response对象;
一个控制器执行的简要流程
通过入口文件(app.php/ap_dev.php) 根据路由 从路由参数中找到 对应的_controller 即可以定位到
如果想访问这个控制器还需要配置路由
控制器;
这个不多说;和其他控制差不多;
sf2入口文件(app.php/app_dev.php 一个生产环境一个是开发环境)
sf2控制器最后的结果都是要返回一个Response对象;
一个控制器执行的简要流程
通过入口文件(app.php/ap_dev.php) 根据路由 从路由参数中找到 对应的_controller 即可以定位到
controller 文件,执行 controller 里面code 最后返回一个response对象;
一个简单的控制器写法
// src/AppBundle/Controller/HelloController.php
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloController
{
public function indexAction($name)
{
return new Response('<html><body>Hello '.$name.'!</body></html>');
}
}
如果想访问这个控制器还需要配置路由
一般的话就是在自己的bundle下面 Resources/config/routing.yml 配置路由
hello: #这个hello 是路由名称 在generateUrl()的时候可以用到这个名称;会自动生成这个路由
path: /hello/{name} #这个就是匹配的URL {name}是参数 (app.php/hello/xxname);
#这个是指向那个控制器那个action方法,这个就是 Acme\DemoBundle\Controller\HelloController.php中indexAction方法;
defaults: { _controller: AcmeHelloBundle:Hello:index }
如何在控制器中获取参数
<span style="font-family: Arial, Helvetica, sans-serif;">1,直接在action中加参数(名称一定要和路由中对应)</span>
class HelloController extends Controller
{
public function indexAction($name)
{
// ...
}
}
2,通过Request对象来获取
use Symfony\Component\HttpFoundation\Request; #请确保包含了Request;
class HelloController extends Controller
{
public function indexAction(Request $request)
{
$name = $request->get('name');
// ...
}
}
在控制器中常用的功能
重定向
public function indexAction()
{
//generatUrl可以传第二个参数 http状态码
//return $this->redirect($this->generateUrl('homepage'), 301);
return $this->redirect($this->generateUrl('homepage'));//homepage就是路由名称;
}
//发送子请求
use Symfony\Component\HttpKernel\HttpKernelInterface;
//发送子请求
$path = array(
'_controller' => 'AcmeDemoBundle:Welcome:testforward',
'name' => 'haha',
'color' => 'yellow',
);
$request = $this->container->get("request");
$subRequest = $request->duplicate(array(), null, $path);
$httpKernel = $this->container->get('http_kernel');
$reponse = $httpKernel->handle(
$subRequest,
HttpKernelInterface::SUB_REQUEST
);
var_dump($reponse->getContent());
return $reponse;
//forward的使用;
public function testAction()
{
return $this->forward(
"AcmeDemoBundle:Welcome:testforward",
array(
'name'=>'haha',
'color'=>'white',
)
);
}
//渲染模板; renderView 返回模板字符串;
$content = $this->renderView(
'AcmeHelloBundle:Hello:index.html.twig',
array('name' => $name)
);
return new Response($content);
render()是直接返回 Response对象;
return $this->render(
'AcmeHelloBundle:Hello:index.html.twig',
array('name' => $name)
);
//session的应用;
$request = $this->container->get("request");
$session = $request->getSession();
$session->set('test', 'testValue');
$session->get("testNull", 'testNull') //第二个参数是默认值
//request 类的方法
$request->isXmlHttpRequest(); // is it an Ajax request?
$request->getPreferredLanguage(array('en', 'fr'));
$request->query->get('page'); // get a $_GET parameter
$request->request->get('page'); // get a $_POST parameter