symfony2 控制器

官方文档http://symfony.com/doc/current/book/controller.html 
控制器;
这个不多说;和其他控制差不多;
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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值