<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ### 組件說明 1. Lying只支持一種路由模式:rewrite,如果你的服務器并不能配置rewrite,且移步其他框架吧 2. rewrite 當你的web服務器支持rewrite,并且你按照Lying的[部署](deploy.md)章節設置了rewrite規則,你可以這樣訪問網站: ~~~ http://domain/module/controller/action/param/value ~~~ ### 配置選項 | 配置名 | 參數類型 | 可選 | 默認值 | 說明 | | --- | --- | --- | --- | --- | | class | string | 是 | lying\service\Router | 不可更改 | | binding | bool | 是 | null | 默認路由是否綁定模塊 | | module | string | 是 | index | 默認模塊 | | controller | string | 是 | index | 默認控制器 | | action | string | 是 | index | 默認方法 | | suffix | string\|bool | 是 | false | 使用的后綴名 | | rule | array | 是 | [] | 路由規則 | | host | array | 是 | [] | 域名模塊綁定 | ### 示例配置 * 路由配置對大小寫敏感。 * 可選參數如果不需要都應該被注釋或者設置成等同于false的值。 * 域名綁定模塊里的參數如果不設置,會默認繼承父級配置。 ~~~php 'router' => [ 'class' => 'lying\service\Router', //路由完整類名,可以不寫,因為是核心組件 'binding' => true, //默認路由是否綁定模塊 'module' => 'index', //默認模塊,默認index 'controller' => 'index',//默認控制器,默認index 'action' => 'index', //默認方法,默認index 'suffix' => '.html', //使用的后綴名,默認空 'rule' => [ //路由規則 //如果binding為false,規則對應的路徑應該為全部小寫,并且是從[模塊]開始寫 //如果binding為true,規則對應的路徑應該為全部小寫,并且是從[控制器]開始寫 //設置規則后原url失效;規則匹配是從上到下,匹配到了就不會繼續下一條匹配 'blog/<id:\d+>/<name>$' => ['admin/blog/get', '.htm'], 'user/<name>/<id>$' => ['user/info/name'], 'yoyo' => ['index/index/index'], ], 'host' => [ //域名模塊綁定 'api.lying.com' => [ //域名,域名綁定的`binding`參數固定為true 'module' => 'index', //域名綁定的模塊,默認繼承上述配置 'controller' => 'index',//默認控制器,默認繼承上述配置 'action' => 'index', //默認方法,默認繼承上述配置 'suffix' => '.js', //使用的后綴名,默認繼承上述配置 'rule' => [ //路由規則,默認繼承上述配置 //規則對應的路徑應該為全部小寫,并且是從[控制器]開始寫 //設置規則后原url失效;規則匹配是從上到下,匹配到了就不會繼續下一條匹配 'user/<id>$' => ['index/user', '.html'], ], ], ], ], ~~~ > binding配置項說明:binding為true的時候,默認路由綁定默認配置項的`module`配置,所以路由規則`rule`的形式應該是`'user/<id>$' => ['index/user']`,而不是`'blog/<id>$' => ['admin/index/user']` 看到這么一大堆配置是不是頭大?我也很頭大!只能用舉栗子來說明了。 #### DEMO1 配置文件: ~~~php 'router' => [ ], ~~~ ~~~html http://domain 這時候訪問的模塊為`index`,控制器為`IndexCtrl`,方法為`index` ~~~ ~~~html http://domain/a/b/c 這時候訪問的模塊為`a`,控制器為`BCtrl`,方法為`c` ~~~ #### DEMO2 配置文件: ~~~php 'router' => [ 'module' => 'admin', 'controller' => 'user', 'action' => 'add', 'suffix' => '.html', ], ~~~ ~~~html http://domain/ //訪問的模塊為`admin`,控制器為`UserCtrl`,方法為`add` http://domain/user/name.html //訪問的模塊為`user`,控制器為`NameCtrl`,方法為`add` http://domain/index/post/del/id/1.html //訪問的模塊為`index`,控制器為`PostCtrl`,方法為`del`,并且帶有一個GET參數`id`,值為1 http://domain/user/ //訪問的模塊為`user`,控制器為`UserCtrl`,方法為`add` ~~~ #### 小結 > * 如果設置了module、controller、action,只有在路由缺省模塊、控制器、方法的時候,才會使用到默認模塊、默認控制器和默認方法;如果沒有設置module、controller、action,那么默認分別是index、index、index。 > * 如果配置了suffix選項,那么可以帶上后綴訪問,也可以不帶;如果沒有配置后綴,那么帶上后綴訪問就會報404。 ### 路由規則 先記住下面幾點: * 如果模塊目錄為`wechatApi`,那么模塊在路由和配置中的表現為`wechat-api`。 * 如果控制器為`UserListCtrl`,那么控制器在路由和配置中的表現為`user-list`。 * 如果方法為`delUser`,那么方法在路由和配置中的表現為`del-user`。 好了,我們開始講路由規則: #### DEMO1 配置文件: ~~~php 'router' => [ 'rule' => [ 'user'=>['index/index/name'], ], ], ~~~ ~~~html http://domain/user/ 實際上你訪問到的是 http://domain/index/index/name/ ~~~ ~~~html http://domain/user/sex/1/ 實際上你訪問到的是 http://domain/index/index/name/sex/1/ 你可以使用$_GET['sex']來獲取到參數 ~~~ > 如果你剛好有一個模塊名為`user`,那么你將不能通過`http://domain/user/`訪問`user`模塊,所以設置路由規則的時候請注意。 #### DEMO2 配置文件: ~~~php 'router' => [ 'rule' => [ 'user/<id>'=>['index/index/name'], ], ], ~~~ ~~~html http://domain/user/1/ 實際上你訪問到的是 http://domain/index/index/name/id/1/ 你可以使用$_GET['id']來獲取到參數 ~~~ #### DEMO3 配置文件: ~~~php 'router' => [ 'rule' => [ 'user/<id:^\d+$>'=>['index/index/name'], ], ], ~~~ ~~~html http://domain/user/1/ 實際上你訪問到的是 http://domain/index/index/name/id/1/ 你可以使用$_GET['id']來獲取到參數 ~~~ ~~~html http://domain/user/1/name/lying/ 實際上你訪問到的是 http://domain/index/index/name/id/1/name/lying/ 你可以使用$_GET['id']、$_GET['name']來獲取到參數 ~~~ ~~~html http://domain/user/abc/ 因為`abc`不匹配正則/^\d+$/,這時候嘗試訪問user模塊下的AbcCtrl控制器,如果不存在則報404錯誤。 ~~~ #### DEMO4 配置文件: ~~~php 'router' => [ 'rule' => [ 'user/<id:^\d+$>$'=>['index/index/name', '.xml'], ], ], ~~~ ~~~html http://domain/user/1.xml 實際上你訪問到的是 http://domain/index/index/name/id/1/ 你可以使用$_GET['id']來獲取到參數id ~~~ ~~~html http://domain/user/1/name/lying.xml 這條路徑不匹配規則,因為規則定義path只到id就結束了,注意`$`符號 所以實際上你訪問到的是 http://domain/user/1/name/lying.xml 就會報404錯誤啦 ~~~ ~~~html http://domain/user/123/ 因為`abc`不匹配后綴`.xml`,這時候報404錯誤。 ~~~ #### 小結 > * 為路由參數設置正則,只要有一個正則不匹配就認為不匹配。 > * 不是所有的參數都必須設置匹配規則。 > * 如果設置了參數,參數就必須存在才能匹配到路由。 > * 如果設置了多個路由,則按照從上到下的順序匹配,匹配到了就不會進行下一條路由規則的匹配。 > * 如果所有的規則都不匹配,就按照`模塊/控制器/方法`來解析路由;binding模式下就按照`控制器/方法`來解析路由。 ### 調用方式 ~~~php \Lying::$maker->get('router'); \Lying::$maker->router(); \Lying::$maker->router; ~~~ ### URL生成 #### DEMO 配置文件: ~~~php 'router' => [ 'module' => 'index', 'controller' => 'user', 'action' => 'name', 'suffix' => '.html', 'rule' => [ 'user' => ['index/index/name'], 'admin/<id>' => ['admin/money/count', '.xml'], 'qq/<num:\d+>$' => ['qq/info/get-num', '.js'], ], ], ~~~ 此次請求路徑為: ~~~html http://domain/ ~~~ ~~~php 1. \Lying::$maker->router->createUrl('sex'); http://domain/index/user/sex.html 2. \Lying::$maker->router->createUrl('money/count'); http://domain/index/money/count.html 3. \Lying::$maker->router->createUrl('user/money/count'); http://domain/user/money/count.html 4. \Lying::$maker->router->createUrl('index/name'); http://domain/user.html 5. \Lying::$maker->router->createUrl('index/index/name'); http://domain/user.html 6. \Lying::$maker->router->createUrl('admin/money/count', ['id'=>1]); http://domain/admin/1.xml 7. \Lying::$maker->router->createUrl('admin/money/count'); http://domain/admin/money/count.html 8. \Lying::$maker->router->createUrl('qq/num/stat', ['name'=>'qq'], false, true); /qq/num/stat.html?name=qq 9. \Lying::$maker->router()->createUrl('admin/money/count', ['id'=>1, 'name'=>'lying']); http://domain/admin/1/name/lying.xml 10. \Lying::$maker->router()->createUrl('qq/info/get-num', ['num'=>296399959, 'name'=>'lying']); http://domain/qq/296399959.js?name=lying ~~~ #### 路由生成規則 路由判斷: * `index => '當前模塊/當前控制器/index'` * `index/name => '當前模塊/index/name'` * `admin/user/list => 'admin/user/list'` * `/admin/user => '/admin/user'` * `/admin/user.html => '/admin/user.html'` 規則匹配: * 如果在rule上有定義要生成的路徑url,并且參數個數剛好、參數格式匹配的話,就會反解析成路由規則所定義的url。當然,如果你的參數比路由設置上的多了,這樣并不影響路由匹配,并且還是能獲取GET參數。 ### 方法列表 ~~~php /** * 返回此次請求的模塊ID * @return string */ public function module(); ~~~ ***** ~~~php /** * 返回此次請求的控制器ID * @return string */ public function controller(); ~~~ ***** ~~~php /** * 返回此次請求的方法ID * @return string */ public function action(); ~~~ ***** ~~~php /** * URL生成 * ```php * 路徑[/index/blog/info],生成[/index/blog/info],使用此形式的時候請注意參數匹配,并且不會路由反解析 * 路徑[post],生成[當前模塊/當前控制器/post] * 路徑[post/index],生成[當前模塊/post/index] * 路徑[admin/post/index],生成[admin/post/index],注意:此用法在模塊綁定中會變成[post/index],模塊綁定模式下,只需要最多到控制器就行 * ``` * @param string $path 路徑 * @param array $params 參數數組,不合法的參數將被剔除,如果有路由規則,參數中必須包含rule中的參數才能反解析 * @param bool $host 是否攜帶完整域名,包含協議頭,默認是 * @param bool $normal 是否把參數設置成?a=1&b=2,默認否,優先pathinfo * @return string 返回生成的URL */ public function createUrl($path, array $params = [], $host = true, $normal = false); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看