symfony2 路由篇

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

注意:

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

初級(jí)

symfony的路由共有四種配置方式,分別是annotation、yml、xml、php。配置文件的優(yōu)先級(jí)高于annotation
比如我們定義一個(gè)簡(jiǎn)單的路由/category/show用來(lái)展示目錄對(duì)應(yīng)的控制器是CategoryController.php,方法是showAction()

  • annotation 是通過(guò)注釋的方式定義路由的,很靈活。
// 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 通過(guò)配置目錄中的routing.yml來(lái)定義,(小心格式,_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的時(shí)候,要在config/config.yml中進(jìn)行配置,以加載路由文件,修改resource的值。

config.yml

進(jìn)化

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

來(lái)張大概格式

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

這個(gè)是不是更加簡(jiǎn)潔了

路由是怎么匹配的呢?

兩個(gè)差不多的路由

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

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

約束`id`的格式

這時(shí),我們就可以通過(guò)www.xxx.com/del/del來(lái)訪問(wèn)serachAction()了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容