windows下laravel5.5手写教程2路由Eloquent ORM操作(适合初学者)

一、路由目录

众所周知,对于我们熟知的任何一款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方法来判断请求是否安全。

二、熟悉路由

我们先写几个简单的路由来认识一下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 ,测试成功。

图片描述
加入路由
图片描述
测试成功
图片描述

至此说明我们已经可以通过路由访问通控制器,
接下来我们来使用Eloquent ORM 来调取数据库数据。

图片描述
如上图,需要在文件头部引入对应Model类
use AppNews ,然后 在方法Index里调用News::all() Eloquent方法,然后展示出数组模式,toArray();
图片描述

除此之外,我们还可以使用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);
    }
}

以上只是数据库最简单的展示方法,具体的增删改查我们会在下节教程继续学习,现在我们再回过头来,看看路由的几种规则。
1、路由的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动作 .
*/

Route::any('Admin/login',function(){
    return 'hello world';
});

2、路由传参
Laravel的路由传参参数必须使用花括号来包裹并且是拼音字母例如使用{id}表示$id参数,具体示例如下图所示:
图片描述

3、路由正则约束
即当我们要验证一些字段的时候,在laravel中,我们可以直接在路由中作出限制。
普通形式
->where('要限制的参数名','限制规则(正则,不用斜线//)');
数组形式
->where(['要限制的参数名1'=>'限制规则1(正则,不用斜线//)','要限制的参数名2'=>'限制规则2(正则,不用斜线//)']);
如下图所示:
图片描述

4、资源路由
例如:我们先用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、控制器路由(5.3以后已经取消了,不再赘述)
每条地址规则都要定义路由,岂不是很累,laravel有一个控制器路由,很好的解决了这个问题。

Route::controller('/example', 'ExampleController');    (5.3已弃用)

6、路由组
在很多模块操作中我们需要把路由分组,对于他们进行权限分组限制,这时候我们就可以使用路由组结合中间件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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值