美文网首页路由联盟
symfony2 路由篇

symfony2 路由篇

作者: winlans | 来源:发表于2017-07-13 16:49 被阅读573次

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

注意:

在配置symfony路由的时候,如果入口文件用的是app.php由于处于生产模式,symfony会缓存路由配置,所以新配的路由可能会不生效(被坑了一会儿),可以暴力的直接清空app/cache文件夹,当然如果使用app_dev.php作为入口文件,由于处于开发模式,symfony并不会缓存路由

初级

symfony的路由共有四种配置方式,分别是annotationymlxmlphp。配置文件的优先级高于annotation
比如我们定义一个简单的路由/category/show用来展示目录对应的控制器是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文档进行定义路由
<!-- 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中进行配置,以加载路由文件,修改resource的值。

config.yml

进化

由于后两种不够直观,所以还是前两种使用的比较多。下面将来点动态路由,以及路由格式限定。

来张大概格式
还有个name字段,给路由起名字,以方便我们后面生成url
name="cate_show"
一定要注意格式,双引号,单引号是不行的。还有后面最好有个空格 这个是不是更加简洁了

路由是怎么匹配的呢?

两个差不多的路由
此时你会发现,不管你怎么匹配,永远只能匹配到delAction(),路由的匹配是按顺序匹配的,如果当前的路由是符合的,就不会再往下搜索,即使我们访问www.xxx.com/del/del 你会发现,还是匹配的delAction(),所以定义路由还是要谨慎的。

那么问题来了,如果我非要匹配searchAction()怎么办呢? 我们可以约束delAction()的参数格式,由于是根据id进行删除的,我们可以将其定义为数字

约束`id`的格式

这时,我们就可以通过www.xxx.com/del/del来访问serachAction()了。

相关文章

  • symfony2 路由篇

    路由是一个url到模块->控制器->方法的映射。 注意: 在配置symfony路由的时候,如果入口文件用的是app...

  • symfony2 请求篇

    要与用户进行交互,请求与响应是必要的,也是必须的。这篇主要是介绍symfony如何接受用户的请求。 获取reque...

  • Composer错误:exceeded the timeout

    Symfony2在使用Composer安装propel的时候遇到下面的错误 [Symfony\Component\...

  • 路由之进阶篇(五)

    这篇文章是路由的进阶篇,会教大家怎么实际运用路由1、命名路由路由结构如下 执行查看路由的命令,查看我们的路由,着重...

  • php extension ts和nts 版本选择

    在安装symfony2时, 系统推荐安装apc, 但是下载下来的apc extension有ts和nts两个版本....

  • Android组件化专题 - 路由框架进阶模块间的业务通信

    上一篇文章,讲解了路由框架实现的原理,并实现了基本的路由框架 页面路由的跳转Android组件化专题 - 路由框架...

  • Vue-Router

    Router:要实现的目的,就是将组件映射到路由,通过路由可以找到组件 基础篇 基本步骤: 定义组件 定义路由 实...

  • Nuxt.js教程(入门篇)

    目录一、路由二、视图三、异步数据四、插件 系列教程Nuxt.js教程(初识篇) 一、路由 1、基础路由 2、动态路...

  • 软路由篇2:3865U软路由折腾记——Esxi软虚拟机+Open

    软路由篇2:3865U软路由折腾记——Esxi软虚拟机+OpenWrt教程 继篇1的直装OpenWrt教程,很多小...

  • Angular路由篇

    一:路由基础 什么是路由: 在web开发中,路由的概念由来已久,简而言之,就是利用URL的唯一性来指定特定的事物,...

网友评论

    本文标题:symfony2 路由篇

    本文链接:https://www.haomeiwen.com/subject/npgwhxtx.html