1、路由是程序的方法和URL的一一映射。
在配置文件里,把经常访问的路由放在前面,可以提高路由匹配的效率。
2、路由匹配的两种方式
- Annotation
允许在方法的上面用注释定义方法运行状态的功能
class UserController extends Controller{
/**
* @Route("/user/login")
* @Template()
*/
public function loginAction(){
//代码
}
}
- router.yml
symfony2常用的配置格式
两种方法不能同时用。
3、URL的定义
静态URL和动态URL
<?php
namespace Scource\WebBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;//下面路由定义中用到Method
//定义总的router,如果当前控制器中用到的路由都是以/page开始/**
* @Route("/page")
*/
class DefaultController extends Controller
{
/**
* @Route("/{page_num}",defaults={"page_num":1},requirements={"page_num"="\d+"})
* @Template()
* @Method("get")
*/
//以上注释并不是没有用,是利用注释动态影响程序代码,定义总的路由之后,在定义当前路由时,只定义第二级路由就可以
//defaults={"page_num":1}设置page_num默认值为1
//requirements={"page_num"="\d+"}要求page_num必须为数字
//http://localhost:8000/app_dev.php/page/555
public function indexAction($page_num)
{
$method = $this->getRequest()->getMethod();//获取表单数据的传送方式
return array('name' => $page_num);
}
/**
* @Route("/test",name="page_test")
* @Template()
*/
//name="page_test"设置路由名称
//通过命令行>php app/console router:match /page/test 可以查询/page/test的路由信息
//http://localhost:8000/page/test?name=world
public function testAction() {
$name = $this->getRequest()->get('name');//获取临时传递参数的值
return array('name' => $name);
}
}
//////////////
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter