symfony2 路由篇

路由是一個url到模塊->控制器->方法的映射。

注意:

在配置symfony路由的時候,如果入口文件用的是app.php由于處于生產(chǎn)模式,symfony會緩存路由配置,所以新配的路由可能會不生效(被坑了一會兒),可以暴力的直接清空app/cache文件夾,當(dāng)然如果使用app_dev.php作為入口文件,由于處于開發(fā)模式,symfony并不會緩存路由

初級

symfony的路由共有四種配置方式,分別是annotationymlxmlphp。配置文件的優(yōu)先級高于annotation
比如我們定義一個簡單的路由/category/show用來展示目錄對應(yīng)的控制器是CategoryController.php,方法是showAction()

  • annotation 是通過注釋的方式定義路由的,很靈活。
// src/AppBundle/Controller/CategoryController.php
namespace AppBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class CategoryController extends Controller{
    /**
     * @Route("/category/show")
     */
    public function showAction()
    {
        // ...
    }
}
  • yml 通過配置目錄中的routing.yml來定義,(小心格式,_controller表示控制器,后面一定要有空格)
//  app/config/routing.yml
category_show:
    path:      /category/show
    defaults:  { _controller:  AppBundle:category:show }
  • xml 我們也可以使用xml文檔進(jìn)行定義路由
<!-- app/config/routing.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/routing
        http://symfony.com/schema/routing/routing-1.0.xsd">
 
    <route id="category_show" path="/category/show">
        <default key="_controller">AppBundle:Category:show</default>
    </route>
</routes>
  • php配置路由
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route; 
$collection = new RouteCollection();
$collection->add('category_show', new Route('/category/show', array( '_controller' => 'AppBundle:Category:show',)));
 return $collection;

在切換xml,yml,php的時候,要在config/config.yml中進(jìn)行配置,以加載路由文件,修改resource的值。

config.yml

進(jìn)化

由于后兩種不夠直觀,所以還是前兩種使用的比較多。下面將來點(diǎn)動態(tài)路由,以及路由格式限定。

來張大概格式

還有個name字段,給路由起名字,以方便我們后面生成url
name="cate_show"
一定要注意格式,雙引號,單引號是不行的。還有后面最好有個空格

這個是不是更加簡潔了

路由是怎么匹配的呢?

兩個差不多的路由

此時你會發(fā)現(xiàn),不管你怎么匹配,永遠(yuǎn)只能匹配到delAction(),路由的匹配是按順序匹配的,如果當(dāng)前的路由是符合的,就不會再往下搜索,即使我們訪問www.xxx.com/del/del 你會發(fā)現(xiàn),還是匹配的delAction(),所以定義路由還是要謹(jǐn)慎的。

那么問題來了,如果我非要匹配searchAction()怎么辦呢? 我們可以約束delAction()的參數(shù)格式,由于是根據(jù)id進(jìn)行刪除的,我們可以將其定義為數(shù)字

約束`id`的格式

這時,我們就可以通過www.xxx.com/del/del來訪問serachAction()了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,954評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,288評論 25 708
  • 不想笑 不想哭 更不想生氣 就這樣吧 什么也不想 什么也不做 讓自己麻木 麻木 再麻木 既然現(xiàn)在是無助的 未來是...
    開花的樹樹閱讀 378評論 13 2
  • 人生若只如初見,何事秋風(fēng)悲畫扇。 他和她相識在初中,他是轉(zhuǎn)校生,來報(bào)道的事后,人家學(xué)生已經(jīng)上課了,他喊...
    慢慢變閱讀 277評論 0 1