路由概念
按照我的理解来说,路由就是让传输进行的url和具体编写的代码的某个方法之间进行正确的匹配,
symfony官网的解释来说,传入request,得到url,进行routing匹配,传给从controller,执行具体的方法,进行相应的响应.
定义路由
两种方法,
1.annation,使用注释对路由进行定义, 适合比较规范化的类,比如用户control 等类,这样访问的时候就可以通过user/method进行
2.router.ytml 使用于没有那么标准的,类似于一本字典,将每一个方法都罗列下来
注意:不能同时使用
url
一个是静态url,一个是动态url,这里先进行一个简单的解释
例,这里要传输页码,这里的requirements是对路由进行限制,不然同一个url可以成功匹配不同的路由
1 class DefaultController extends Controller
2 {
3 /**
4 * @Route("/page/{page_num}",defaults={"page_num":1},requirements={"page_num"="d+"})
5 * @Method("POST")
* @Template()
6 */
7 public function indexAction($page_num)
8 {
9 return array('name' => $page_num);
10 }
11 }
这里传入page_num参数,defaults设置默认值,requirements对类型进行限制,动态的url
而如果要是静态的,return 一个固定的数字就是静态url,
注意:symfony默认去掉最后的/ 即传入默认值时只需要page即可,不需要page/
1.网页一般要提交信息时,在annoation里面进行@Method("方法") 设置相应的方法,post/get,
ps:需要在前面添加use SensioBundleFrameworkExtraBundleConfigurationMethod;
2.对于比较复杂的网站,可以在前面添加
/**
* @Route("/page")
*/
//进行简化,之后的路由定义都是在/page目录下面进行定义的
3.ParamConverter 方法,将传入的参数转化为一个类,这样子就可以直接通过这个类的方法来获取各种信息
use SensioBundleFrameworkExtraBundleConfigurationParamConverter;
class DefaultController extends Controller
{
/**
* @Route("/index/{page_num}",defaults={"page_num":1},requirements={"page_num"="d+"})
* @ParamConverter("post",class="ScourgenWebBundle:Post")
* @Template()
*/
public function indexAction(Post $post)
{
$title =$post->getTitle();
return array('name' => $title);
}
}
//类似这样进行使用即可,
除此之外,路由还可以在routing.yml当中进行定义,这种方式更为规范,之后也更好进行查找更换操作
blog_list: //路由名称
path: /blog/{page} //路由路径
defaults: { _controller: AppBundle:Blog:list, page: 1 } //跳转到哪个Controller,并且可以设置参数默认值
requirements: //对于url和路由进行匹配的的限制,即参数的属性限制
page: 'd+'
_controller:参数格式 Bundle名:控制器类名:具体的方法名