来自  资质荣誉 2019-09-22 00:30 的文章
当前位置: 澳门太阳娱乐手机登录 > 资质荣誉 > 正文

财富路由

一、HTTP路由

所有路由都定义在 AppProvidersRouteServiceProvider 类载入的app/Http/routes.php文件中。

一、HTTP路由

所有路由都定义在 AppProvidersRouteServiceProvider 类载入的 app/Http/routes.php文件中。

 

1. 基本路由

简单的 Laravel 路由只接受一个 URI 和一个闭包

123 Route::get('foo',function() {return'Hello, Laravel!';});

对于常见的 HTTP 请求,Laravel 有以下几种路由

123456789 Route::get($uri,$callback);//响应 get 请求Route::post($uri,$callback);Route::put($uri,$callback);Route::patch($uri,$callback);Route::delete($uri,$callback);Route::options($uri,$callback);Route::match(['get','post'],$uri,$callback);//响应 get, post 请求Route::any('foo',$callback);//响应所有请求

其中,$callback 可以是一个闭包,也可以是一个控制器方法。实际上,在开发中有不少情况是用作控制器方法的。

  

1. 基本路由

简单的 Laravel 路由只接受一个 URI 和一个闭包

Route::get('foo', function () {
    return 'Hello, Laravel!';
});

 

对于常见的 HTTP 请求,Laravel 有以下几种路由

Route::get($uri, $callback); //响应 get 请求
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Route::match(['get', 'post'], $uri, $callback); //响应 get, post 请求
Route::any('foo', $callback); //响应所有请求

其中,$callback 可以是一个闭包,也可以是一个控制器方法。实际上,在开发中有不少情况是用作控制器方法的。

  

2. 路由参数

123456789101112131415161718192021222324252627 //单个路由参数Route::get('user/{id}',function($id) {return'User '.$id;});//多个路由参数Route::get('posts/{post}/comments/{comment}',function($postId,$commentId) {//});//单个路由参数Route::get('user/{id?}',function($id= 1) {return'User '.$id;});//多个路由参数Route::get('posts/{post}/comments/{comment?}',function($postId,$commentId= 1) {//});//注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误// 正则约束单个参数Route::get('user/{name?}',function($name='Jone') {return$name;})->where('name','w+');//约束参数为单词字符(数字、字母、下划线)// 正则约束多个参数Route::get('user/{id}/{name}',function($id,$name) {//})->where(['id'=>'[0-9]+','name'=>'[a-z]+']);

  

2. 路由参数

//单个路由参数
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
//多个路由参数
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});
//单个路由参数(可选)
Route::get('user/{id?}', function ($id = 1) {
    return 'User '.$id;
});
//多个路由参数(可选)
Route::get('posts/{post}/comments/{comment?}', function ($postId, $commentId = 1) {
    //
});
//注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误

// 正则约束单个参数
Route::get('user/{name?}', function ($name = 'Jone') {
    return $name;
})->where('name', 'w+');  //约束参数为单词字符(数字、字母、下划线)

// 正则约束多个参数
Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

  

二、创建控制器

使用 Artisan 命令创建php artisan make:controllerUserController

现在,在 app/Http/Controllers 这个控制器目录下就生成了UserController.php 的控制器文件。

二、创建控制器

使用 Artisan 命令创建 php artisan make:controller UserController 

现在,在 app/Http/Controllers 这个控制器目录下就生成了 UserController.php 的控制器文件。

 

三、高级路由

三、高级路由

1. 命名路由

123456789 //命名闭包路由Route:get('user',array('as'=>'alial',function;//或 name 方法链Route:get('user',function->name('alias');//命名控制器方法路由Route:get('user',array('uses'=>'AdminIndexController@index','as'=>'alias'));//或 name 方法链Route:get('user','AdminIndexController@index')->name('alias'));

1. 命名路由

//命名闭包路由
Route:get('user', array('as' => 'alial', function(){}); 
//或 name 方法链
Route:get('user', function(){})->name('alias');

//命名控制器方法路由
Route:get('user', array('uses' => 'AdminIndexController@index', 'as' => 'alias')); 
//或 name 方法链
Route:get('user', 'AdminIndexController@index')->name('alias'));

 

2. 路由分组

2.1 路由前缀和命名空间

例如,有两条指向控制器方法的路由

12 Route::get('admin/login','AdminIndexController@login');Route::get('admin/index','AdminIndexController@index');

拿第一条来说,

参数一:admin/login表示这个 URI 在请求网站根目录下的 admin/login 资源,完整地址就是 Apache 的路由重写,隐藏了 “index.php“ ),这个请求被映射到第二个参数中指定的控制器方法。注意,网站根目录是入口文件所在目录,在 Laravel 中就是 public 目录,配置服务器时最好也指向这里。

参数二:AdminIndexController@login表示这个控制器方法是在AppHttpControllers命名空间下的,连起来就是AppHttpControllersAdminIndexController 控制器里的 login 方法。

显然,两条路由的 URI 和 控制器方法 都有相同的部分,那么,启用路由分组可以提取出公共部分:

12345 // 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名的公共部分Route::group(array('prefix'=>'admin','namespace'=>'Admin'),function(){Route::get('login','IndexController@login');Route::get('index','IndexController@index');});

2.2 资源路由

资源路由就是映射到资源控制器的路由,Laravel 资源控制器内置了对资源增删改查的 7 个方法以及 7 条路由。

首先,创建资源控制器ArticleController

1 php artisan make:controller Admin/ArticleController --resource

这样就生成了资源控制器在 app/Http/Controllers/Admin/ArticleController.php文件(Admin 文件夹不存在时会自动创建),内置的 7 个方法如下 :

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 <?phpnamespaceAppHttpControllersAdmin;useIlluminateHttpRequest;useAppHttpRequests;useAppHttpControllersController;classLinksControllerextendsController{/*** 显示一个资源的列表** @return IlluminateHttpResponse*/publicfunctionindex(){//}/*** 显示一个表单来创建一个新的资源** @return IlluminateHttpResponse*/publicfunctioncreate(){//}/*** 保存最新创建的资源** @param IlluminateHttpRequest $request* @return IlluminateHttpResponse*/publicfunctionstore(Request$request){//}/*** 显示指定的资源** @param int $id* @return IlluminateHttpResponse*/publicfunctionshow($id){//}/*** 显示一个表单来编辑指定的资源** @param int $id* @return IlluminateHttpResponse*/publicfunctionedit($id){//}/*** 更新指定的资源** @param IlluminateHttpRequest $request* @param int $id* @return IlluminateHttpResponse*/publicfunctionupdate(Request$request,$id){//}/*** 删除指定的资源** @param int $id* @return IlluminateHttpResponse*/publicfunctiondestroy($id){//}}

然后,定义资源路由。这里我还是选择在路由分组下定义,定义一条就好

123456 Route::group(array('prefix'=>'admin','namespace'=>'Admin'),function(){Route::get('login','IndexController@login');Route::get('index','IndexController@index');// 资源路由Route::resource('article','ArticleController');});

  

最后,查看路由。有了资源控制器 和 资源路由,就可以看一下对以上 7 个方法的 HTTP 请求方式了。

使用 Artisan 命令php artisan route:list 列出当前的所有路由,请求方式、URI、控制器方法、中间件都罗列出来了。

图片 1

2. 路由分组

2.1 路由前缀和命名空间

例如,有两条指向控制器方法的路由

Route::get('admin/login', 'AdminIndexController@login');
Route::get('admin/index', 'AdminIndexController@index');

 

拿第一条来说,

参数一:admin/login  表示这个 URI 在请求网站根目录下的 admin/login 资源,完整地址就是   (这里开启了 Apache 的路由重写,隐藏了 “index.php“ ),这个请求被映射到第二个参数中指定的控制器方法。注意,网站根目录是入口文件所在目录,在 Laravel 中就是 public 目录,配置服务器时最好也指向这里。

参数二:AdminIndexController@login 表示这个控制器方法是在 AppHttpControllers 命名空间下的,连起来就是 AppHttpControllersAdminIndexController 控制器里的 login 方法。

 

显然,两条路由的 URI 和 控制器方法 都有相同的部分,那么,启用路由分组可以提取出公共部分:

// 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名(命名空间语法)的公共部分
Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){
    Route::get('login', 'IndexController@login');
    Route::get('index', 'IndexController@index');
});

 

2.2 资源路由

资源路由就是映射到资源控制器的路由,Laravel 资源控制器内置了对资源增删改查的 7 个方法以及 7 条路由。

首先,创建资源控制器 ArticleController

php artisan make:controller AdminArticleController  --resource

上述命令请确保在 app/Http/Controllers 目录下存在 Admin 目录。

这样就生成了资源控制器在 app/Http/Controllers/Admin/ArticleController.php 文件,内置的 7 个方法如下 :

<?php

namespace AppHttpControllersAdmin;

use IlluminateHttpRequest;
use AppHttpRequests;
use AppHttpControllersController;

class LinksController extends Controller
{
    /**
     * 显示一个资源的列表
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        //
    }

    /**
     * 显示一个表单来创建一个新的资源
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        //
    }

    /**
     * 保存最新创建的资源
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        //
    }

    /**
     * 显示一个表单来编辑指定的资源
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        //
    }

    /**
     * 更新指定的资源
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定的资源
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        //
    }
}

 

然后,定义资源路由 。这里我还是选择在路由分组下定义,定义一条就好

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){ 
    Route::get('login', 'IndexController@login');
    Route::get('index', 'IndexController@index');
    // 资源路由
    Route::resource('article', 'ArticleController');
});

  

最后,查看路由。有了资源控制器 和 资源路由,就可以看一下对以上 7 个方法的 HTTP 请求方式了。

使用 Artisan 命令 php artisan route:list  列出当前的所有路由,请求方式、URI、控制器方法、中间件都罗列出来了。

图片 2

推荐阅读:有关 Laravel 的 HTTP 路由知识点还有 路由模型绑定、表单方法伪造 和 CSRF 保护等知识,详细请参考 Laravel 手册-HTTP路由功能。

相关阅读:URI 和 URL 的区别

本文由澳门太阳娱乐手机登录发布于 资质荣誉,转载请注明出处:财富路由

关键词: