1、路由目录php
众所周知,对于咱们熟知的任何一款PHP框架,例如TP、CI、YII、路由系统都是极其重要的存在。 对于laravel框架也同样,对于数据库的操做,无非就是增删改查,只不过框架不一样,语法不一样, 因此掌握laravel框架的路由系统对于咱们掌握该框架有着相当重要的做用。 咱们知道对于LARAVEL框架之前的版本,路由都是写在app里的,如今的laravel框架路由存在在Routes目录下,以下图所示:
全部的 Laravel 路由都在 routes 目录中的路由文件中定义,这些文件都由框架自动加载。 routes/web.php 文件用于定义 web 界面的路由。 这里面的路由都会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。 定义在 routes/api.php 中的路由都是无状态的,而且被分配了 api 中间件组。 咱们先来熟悉一下HTTP访问的几种方法: 1. Get方法:经常使用的方法,略; 2. Post方法:经常使用的方法,略; 3. Head方法:与get方法相似,主要是为了获取某个访问的头部信息, 服务器不返回请求内容; 4. PUT方法:请求往服务器上存文件; 5. DELETE方法:请求删除服务器上的文件; 6. TRACE方法:就是获取服务器收到的来自客户端的请求信息(收发调试), 通常用于调试服务器; 7. Connect方法:把服务器做为跳板,让服务器代替用户去访问其它网页, 以后把数据原本来本的返回给用户; 8. Options方法:获取服务器URI所支持的方法,或用于检查服务器的性能, ajax进行跨域访问时,先发送options方法来判断请求是否安全。
2、熟悉路由laravel
咱们先写几个简单的路由来认识一下Laravel下的路由路径。 在开始练习以前,咱们先关闭routes/web.php 下的下面两行auth相关代码,避免影响练习测试。 //Auth::routes(); //Route::get('/home', 'HomeController@index')->name('home');
此刻咱们访问127.0.01:9999/news时,显示的应该是NEWS字样。 接下来咱们来給数据表中填充十组数据,而后创建Model类以及控制器,经过路由来访问这些数据。(这里就不经过laravel自带的 seed 填充了,有兴趣的朋友能够自行查询怎么填充模拟数据.关键字"laravel seeder")。表结构以下图所示
使用artisan命令创建Model类,打开cmd 切换到项目根目录,输入php artisan make:model News 获得以下图所示
打开app/News.php 文件,因为laravel默认Model类对应的表名为类名加s,既对应的表应该是newss,咱们在文件中加入protected $table = 'News',指定该model类对应表news。 咱们再使用artisan创建控制器. php artisan make:controller IndexController 成功以后,打开app/Http/Controllers/IndexController.php ,测试成功。
加入路由
测试成功web
至此说明咱们已经能够经过路由访问通控制器, 接下来咱们来使用Eloquent ORM 来调取数据库数据。
如上图,须要在文件头部引入对应Model类
use AppNews ,而后 在方法Index里调用News::all() Eloquent方法,而后展现出数组模式,toArray();ajax
除此以外,咱们还可使用DB类的静态方法来和数据库进行交互。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\News; use DB; class IndexController extends Controller { public function index() { // echo '测试成功!'; // var_dump(News::all()->toArray()); $news = DB::table('news')->get(); var_dump($news); } }
以上只是数据库最简单的展现方法,具体的增删改查咱们会在下节教程继续学习,如今咱们再回过头来,看看路由的几种规则。
一、路由的match、any方法
/*
match方法是laravel本身封装好的,一样它的意思是匹配
*/数据库
Route::match(['get,post],'admin/login',function(){ return 'login'; });
/*
在这里呢咱们能够用match这个方法去匹配两种请求方式,这样是否是减小了代码量呢
*/
咱们还有第二种方法,
/*
GET,POST,PUT,DELETE.. 任何方法访问 www.itbool.com/Admin/login, 都用第2个参数中的匿名函数去响应全部HTTP动做 .
*/api
Route::any('Admin/login',function(){ return 'hello world'; });
二、路由传参
Laravel的路由传参参数必须使用花括号来包裹而且是拼音字母例如使用{id}表示$id参数,具体示例以下图所示:跨域
三、路由正则约束
即当咱们要验证一些字段的时候,在laravel中,咱们能够直接在路由中做出限制。
普通形式
->where('要限制的参数名','限制规则(正则,不用斜线//)');
数组形式
->where(['要限制的参数名1'=>'限制规则1(正则,不用斜线//)','要限制的参数名2'=>'限制规则2(正则,不用斜线//)']);
以下图所示:数组
四、资源路由
例如:咱们先用artisan命令,生成一个控制器:安全
php artisan make:controller PhotoController --resource
(artisan命令还有不少,能够极大地提升咱们的开发速度)
接下来为这个控制器注册一个资源路由:服务器
Route::resource('photo','PhotoController');
此时打开cmd命令行 输入php artisan route:list ,能够看到以下图
这个路由声明建立多个路由来处理资源上的各类行为。生成的控制器为每一个行为保留了方法,
同时还包括了 处理 HTTP 动做和 URI 的声明注释。
这里须要注意的是由于 HTML 表单不能生成 PUT、 PATCH 或者 DELETE 请求,因此你须要添加一个隐藏的 _method 输入字段来伪造这些 HTTP 动做。辅助函数 method_field 能够帮你建立这个字段:
{{ method_field('PUT') }}
或者在表单中加入像这样
<input type="hidden" name="_method" value="put">
表单提交方式不须要变,依旧是 method='POST'便可。
五、控制器路由(5.3之后已经取消了,再也不赘述)
每条地址规则都要定义路由,岂不是很累,laravel有一个控制器路由,很好的解决了这个问题。
Route::controller('/example', 'ExampleController'); (5.3已弃用)
六、路由组
在不少模块操做中咱们须要把路由分组,对于他们进行权限分组限制,这时候咱们就可使用路由组结合中间件Middleware来进行简单的限制。
1)创建中间件
首先咱们在应用根目录下运行以下Artisan命令生成一个测试用的中间件TestMiddleware:
php artisan make:middleware TestMiddleware
这样会在/app/Http/Middleware目录下生成一个TestMiddleware.php文件,
打开该文件编辑TestMiddleware类的handle方法以下:
public function handle($request, Closure $next) { if($request->input('age')<18) return redirect()->route('refuse'); return $next($request); }
咱们在中间件中定义这段业务逻辑的目的是年龄18岁如下的未成年人不能访问。
2)新增中间件属性
而后咱们打开/app/Http/Kernal.php文件,新增TestMiddleware到Kernel的$routeMiddleware属性:
test' => \App\Http\Middleware\TestMiddleware::class,到数组中去
3)定义路由组
Route::group(['middleware'=>'test'],function(){ Route::get('/write/laravelacademy',function(){ //使用Test中间件 }); Route::get('/update/laravelacademy',function(){ //使用Test中间件 }); }); Route::get('/age/refuse',['as'=>'refuse',function(){ return "未成年人禁止入内!"; }]);
此时,咱们访问127.0.0.1:9999/write/laravelacademy?age=15时候,
就会自动跳转到http://127.0.0.1:9999/age/refuse。