• 我 && symfony3 (路由)


    symfony 在控制器定义路由

     

    @Route("/lucky/number")     #必须用双引号

     

    @Route("/api/get-lucky-number/{number}"#{number} 为传参

     

    routing.yml 配置路由

     

     

    api:

        path:     /api/{_locale}/{year}/{title}.{_format}

        defaults: {_controller: AppBundle:Api:getJson, _format:html}

        requirements:

            _locale: en|fr

            _format: html|rss

            year:    d+

        schemes:  [http]

    show:

        path:     /show.json

        defaults:  {_controller: AppBundle:Api:showUrl}

        schemes:  [http]

     

    tpl:

        path:     /lucky/number

        defaults: {_controller:AppBundle:Api:number}

        schemes:  [http]

    • api : 表示该理由的别名,在 使用控制器使用 generate && generateUrl 可以使用到
    • path : 表示访问到url ,其中参数可以用{}传递 ,传递到参数可以在 控制器中动作参数使用
    • defaults : 表示对应到控制器及方法,APPBundle 表示控制器所在目录,Api 表示控制器,getJson 表示请求方法
    • requirements : 表示参数到验证方式,其中 | 表示 ‘或’, d+ 为匹配一个数字
    • schemes : 表示对应到请求模式,http | https

     

    下面介绍下在控制器中,如何使用这样到router

     

      # $year,$title 就是{}中到参数, $_controller 表示控制器, $_route 对应别名 api,show, tpl

        public function getJsonAction($title, $year, $_locale, $_format, $_controller, $_route)

        {

            $numbers = [];

            for ($i = 0; $i < 10; $i++)

            {

                $numbers[] = rand(0, 100);

            }

            $other = ['title' => $title, 'year' => $year, '_locale' => $_locale, '_format' => $_format, '_controller' => $_controller, '_route' => $_route];

            return  new JsonResponse($other);

        }

        

        /**

           #运行结果

            {

                title: "api",

                year: "2014",

                _locale: "en",

                _format: "html",

                _controller: "AppBundleControllerApiController::getJsonAction",

                _route: "api"

            }

            

        */

     

        public function showUrlAction()

        {

            //获取对应的url

            $params = $this->get('router')->match('/lucky/number');

     

            //生成uri

            $uri = $this->get('router')->generate('api', [

                'year'  => '2022',

                'title' => 'en',

            ]);

     

            //生成带域名的url

            $url = $this->generateUrl('api', [

                'year'  => '2022',

                'title' => 'fr',

                '_format'   => 'html'

            ], UrlGeneratorInterface::ABSOLUTE_URL);

    //        $uri = '';

            return new JsonResponse(['params' => $params, 'uri' => $uri, 'url' => $url]);

     

        }

        

        /**

            {

                params: {

                _controller: "AppBundleControllerApiController::numberAction",

                _route: "app_api_number"

                },

                uri: "/api/en/2022/en",

                url: "http://127.0.0.1:8000/api/en/2022/fr"

            }

        

        */

    • $this->get('router')->generate('api' , ... ) 表示获取一个uri
    • $this->generateUrl('api', , UrlGeneratorInterface::ABSOLUTE_URL) 则表示生成绝对到url
  • 相关阅读:
    如何在dede栏目设置中添加自定义字段(dede二次开发-纯抄贴)
    dedecms内容页 上下篇 添加文章描述方法
    关于透明层----背景透明字不透明的效果
    什么是JavaScript闭包终极全解之一——基础概念
    phpcms v9中调用多栏目的方法--get标签(备实例)
    PHP识别电脑还是手机访问网站
    PHP中 post 与get的区别 详细说明
    js 处理数据里面的空格
    mysql中的unix_timestamp函数
    PHP中date函数月和日带0问题
  • 原文地址:https://www.cnblogs.com/zeopean/p/symfony3.html
Copyright © 2020-2023  润新知