2017 © Pedro Peláez
 

library route

路由管理组件

image

houdunwang/route

路由管理组件

  • Tuesday, February 27, 2018
  • by houdunwang
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1,255 Installations
  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 12 Versions
  • 1 % Grown

The README.md

路由

路由是自定义url地址执行指定的控制器或闭包函数,良好的路由定义可以对seo起到很好的效果。, (*1)

组件依赖 Request组件Cache组件 请查看GitHub文档配置后使用。, (*2)

[TOC], (*3)

安装

使用 composer 命令进行安装或下载源代码使用。, (*4)

composer require houdunwang/route

HDPHP 框架已经内置此组件,无需要安装, (*5)

配置

$config = [
    /*
    |--------------------------------------------------------------------------
    | 控制器命名空间前缀
    |--------------------------------------------------------------------------
    */
    'app'                => 'tests\app',

    /*
    |--------------------------------------------------------------------------
    | URL变量
    |--------------------------------------------------------------------------
    | 访问控制器方法时的GET变量
    */
    'url_var'            => 's',

    /*
    |--------------------------------------------------------------------------
    | 请求时没有明确控制器时默认使用的控制器
    |--------------------------------------------------------------------------
    */
    'default_controller' => \tests\app\controller\Entry::class,

    /*
    |--------------------------------------------------------------------------
    | 请求时没有明确方法时默认执行的方法
    |--------------------------------------------------------------------------
    */
    'default_action'     => 'home',

    /*
    |--------------------------------------------------------------------------
    | 是否对路由的解析结果进行缓存用于提高系统性能
    |--------------------------------------------------------------------------
    | 当开启DEBUG时是不会缓存的,这是为了让开发者可以即时看到修改效果
    */
    'route_cache'        => false,
];
\houdunwang\config\Config::batch($config);

基础路由

基础路由

URL 路由器可隐藏网站物理文件结构提高安全性,美化 URL 地址便于 SEO。 您将在 system/routes.php 中定义应用中的大多数路由。 大多数基本的路由都只接受一个 URI 和 一个 闭包(Closure) 参数。, (*6)

[TOC], (*7)

GET 路由

/ 表示访问网站主页, (*8)

Route::get('/',function(){
    return '后盾网 欢迎您';
});

设置路由路径, (*9)

Route::get('show', function(){
    return 'Hello HDPHP';
});

POST 路由

触发POST提交的场景很多,比如form标签设置methos='post' 或 jquery ajax提交设置type='POST',都有可能触发POST路由。, (*10)

我们来能过实例讲解一下,比如HTML 模板代码如下:, (*11)

<form action="user/add" method="post">
    <input type="text" name="user">
    <input type="submit">
</form>

路由规则定义如下:, (*12)

Route::post('user/add', function(){
    p($_POST);
});

当我们提交form表单时,因为数据提交方式为POST,并且提交地址与路由匹配,所以就会执行路由回调函数。, (*13)

PUT路由

当提交方式设置为PUT,比如jquery中我们可以设置type为PUT,如果是普通form表单提交,我们也可以在表单中添加隐藏域。, (*14)

html表单定义如下:, (*15)

<form action="user/add" method="post">
    <input type="text" name="user">
    <input type="hidden" name="_method" value="PUT">
    <input type="submit">
</form>

路由定义如下:, (*16)

Route::put('user/add', function(){
    p($_POST);
});

PUT 提交的数据,我们还是使用$_POST获取, (*17)

DELETE 路由

DELETET 定义的路由与使用PUT定义是一样的,下面是表单的设置:, (*18)

<form action="user/del" method="post">
    <input type="text" name="user">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit">
</form>

路由定义如下, (*19)

Route::DELETE('user/del',function(){
    p($_POST);
});

ANY路由

any 路由类型会识别所有有提交模式,而不是像GET模式,只能匹配GET提交, (*20)

Route::any('user',function(){
    return '你好 后盾网';
});

获取匹配成功的路由

用于获取本次请求匹配成功的路由规则。, (*21)

Router::getMatchRoute();

方法欺骗

HTML 表单没有支持 PUT 或 DELETE 请求。所以当定义 PUT 以及 DELETE 路由并在 HTML 表单中被调用的时候,您将需要添加隐藏 _method 字段在表单中。, (*22)

发送的 _method 字段对应的值会被当做 HTTP 请求方法。举例来说:, (*23)

<form action="user/api" method="POST">
    <input type="hidden" name="_method" value="PUT">
</form>

路由参数

[TOC], (*24)

参数设置

必须参数

Route::get('user/{id}', function($id){
    return 'User '.$id;
});

可选择的路由参数

可选参数指参数有可能没有值,所以必须给闭包函数设置参数默认值,否则系统会报错。, (*25)

Route::get('user/{name?}', function($name = '后盾网'){
    return $name;
});

获取参数

取得指定参数

如果需要取得路由解析后的参数,使用 Route::input 方法:, (*26)

Route::get('{name}', function(){
    return Route::input('name');
});

取得所有参数

input 方法中不传任何参数时将返回所有路由参数。, (*27)

Route::get('user/{id}_{name}', function(){
    return Route::input();
});

参数检测

参数检测是对路由中的参数进行验证,如果验证不通过这条路由将被忽略。, (*28)

[TOC], (*29)

使用正则表达式限制参数

Route::get('user/{id}', function($id){
    return $id;
})->where('id', '[0-9]+');

使用条件限制数组

Route::get('user/{id}/{name}', function($id, $name){
    echo $id,$name;
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

依赖注入

依赖注入IOC等特性贯穿于系统的各个层面,在路由操作提供了灵活的注入机制。, (*30)

Route::get( 'user/{id}/{name}', function ($id, $f = '后盾人', \system\model\News $a, $name ) {
    echo $id, $name;
    dd( $f );
    dd( $a );
} )

上在的例子中闭包的 $id 与 路由参数同名,也就是说闭包参数 $id,无论放在任何位置系统都能识别到,不需要与路由中参数位置顺序一致。, (*31)

控制器

控制器路由是用来访问网站控制器方法使用的,我们来看下面的代码:, (*32)

[TOC], (*33)

配置

命名空间

路由加载控制器时使用 app.php配置文件中的 path配置项做为控制器类的起始命名空间。 比如我们使用 app\home\Entry 类,我们定义的路由如下:, (*34)

Route::get('show','home\Entry@show');

系统使用 app\home\Entry 控制器类。, (*35)

默认方法

当所有路由都没有匹配成功时,可以使用 config/http.php 配置文件中,default_controller与default_action 定义的配置项执行默认控制器方法。, (*36)

基本使用

Route::get('foo', 'home\index@add');

当我们访问foo时调用 Home模块Index控制器的add方法, (*37)

参数传递

控制器接收路由参数时变量名要与路由定义的参数名一致,顺序不需要和路由参数顺序一致,更多的路由参数学习请参数 路由参数 课程章节中的讲解。, (*38)

路由定义

执行Entry控制器中的show方法, (*39)

Route::get('show/{id}_{cid}.html', 'home\entry@show')

控制器定义

namespace app\home\controller; 
class Entry{
    public function show($id,$cid){
        echo "访问是 $id,$cid";
    }
}

隐式控制器

HDPHP 让你能轻易地定义单一路由来处理控制器中的每一项行为。首先用 Route::controller 方法定义一个路由:, (*40)

Route::controller('user', "home\Entry")

Controller 方法接受两个参数。第一个参数是控制器欲处理的 URI,第二个是控制器的类名称。接着只要在你的控制器中加入方法,并在名称前加上它们所对应的 HTTP 请求。, (*41)

namespace app\home\controller;
class Entry{
    public function getIndex(){
        echo 'index';
    }
    public function getAdd(){
        echo 'add';
    }   
    public function postEdit(){
        echo 'edit';
    }
    public function putUpdate(){
        echo 'update';
    }
    public function deleteRemove(){
        echo 'delete';
    }
}

如果发送以下请求,将会执行 getAdd 方法, (*42)

http://hdphp2.hd/user/add

分组路由

路由分组用于将拥有相同特性的路由放在一组中进行管理,相同特性包括路由前缀,中间件等等。, (*43)

[TOC], (*44)

路由前缀

使用 prefix 选项可以将拥有相同前缀的路由归纳到一个组中进行管理。, (*45)

Route::group(['prefix' => 'admin'], function(){
    Route::get('add', function()
    {
        echo 'add';
    });

    Route::get('save', function()
    {
        echo 'save';
    });
});

比如我们访问admin/add方法后,会匹配到第一个路由定义, (*46)

RESTful 路由

REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则:, (*47)

  1. 网络上的所有事物都被抽象为资源(resource);
  2. 每个资源对应一个唯一的资源标识(resource identifier);
  3. 通过通用的连接器接口(generic connector interface)对资源进行操作;
  4. 对资源的各种操作不会改变资源标识;
  5. 所有的操作都是无状态的(stateless)

资源控制器可让你无痛建立和资源相关的 RESTful 控制器。例如,你可能希望创建一个控制器,它可用来处理针对你的应用程序所保存相片的 HTTP 请求。, (*48)

[TOC], (*49)

使用

创建资源控制器

php hd make:controller home.photo resource

设置路由规则

我们注册一个指向此控制器的资源路由:, (*50)

Route::resource('photo', 'home/photo');

此单一路由声明创建了多个路由,用来处理各式各样和相片资源相关的 RESTful 行为。同样地,产生的控制器已有各种和这些行为绑定的方法,包含用来通知你它们处理了那些 URI 及动词。, (*51)

说明

路由说明

由资源控制器处理的行为, (*52)

动词          路径                       行为
GET         /photo                      索引
GET            /photo/create               创建
POST           /photo                      保存
GET         /photo/{photo}              显示
GET            /photo/{photo}/edit         编辑
PUT            /photo/{photo}              更新
DELETE       /photo/{photo}              删除

代码

namespace app\home\controller;
class Photo{
    //GET /photo 索引
    public function index(){
        echo 'index';
    }

    //GET /photo/create 创建界面
    public function create(){
        echo 'create';
    }

    //POST /photo 保存新增数据
    public function store(){
        echo 'store';
    }

    //GET /photo/{photo} 显示文章
    public function show($id){
        echo 'show';
    }

    //GET /photo/{photo}/edit 更新界面
    public function edit($id){
        echo 'edit';
    }

    //PUT /photo/{photo} 更新数据
    public function update($id){
        echo 'update';
    }

    //DELETE /photo/{photo} 删除
    public function destroy($id){
        echo 'destroy';
    }
}

伪造方法

由于HTML表单不能发起PUT、PATCH和DELETE请求,需要添加一个隐藏的 _method 字段来伪造HTTP请求方式,辅助函数 method_field 可以帮我们做这件事:, (*53)

{{ method_field('PUT') }}

系统会生成表单, (*54)

<input type="hidden" name="_method" value="PUT"/>

The Versions

27/02 2018

dev-master

9999999-dev http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

27/02 2018

v1.0.24

1.0.24.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

05/01 2018

v1.0.23

1.0.23.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

10/10 2017

v1.0.22

1.0.22.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

07/06 2017

v1.0.21

1.0.21.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

04/06 2017

v1.0.20

1.0.20.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

22/05 2017

v1.0.19

1.0.19.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

The Development Requires

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

15/03 2017

v1.0.9

1.0.9.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

12/02 2017

v1.0.8

1.0.8.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

08/02 2017

v1.0.7

1.0.7.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

10/01 2017

v1.0.6

1.0.6.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器

08/01 2017

v1.0.5

1.0.5.0 http://www.houdunwang.com/

路由管理组件

  Sources   Download

MIT

The Requires

 

by 后盾网向军

router hdphp houdunwang 后盾网 后盾人 向军老师 路由器