一、路由
二、控制器
1.路径:http/controller
2.关联路由:
需要先设置命名空间(namespace App\http\Controllers;);
在继承controller基类的类中书写函数(class 类名 extents Controller{});
添加路由(get/post/any)(路由名,类名@方法名)||或者(’路由名‘,[‘uses’ => ‘类名@方法名’,[as => ‘别 名’]])[-> where(‘参数名’),’正则表达式’]
3.使用路由特性:
三、视图(resource/view,一个控制器对应一个目录)
1、新建视图
2、输出视图
return view(‘模板目录/模板名称’[,’变量名’ =>’变量值’,…]);在视图中通过{{变量名}}来调用变量
四、模型(app目录下的php文件)
1、新建模型
namespace App;
use ….
class 类名 extends Model{
public function 方法名(){//方法内容}
}
2、调用模型
在控制器中调用:[return] 类名::方法名();
五、数据库操作(查询构造器)
1.连接数据库
config ->database.php
修改env文件中的数据库配置
2. 使用数据库操作语句(语句中的变量用?表示,在括号里语句结尾处写变量值)
在控制器的方法中使用,eg:
(1)查询
result=DB::select(′select∗fromtable1whereid>?′,[20]);dd(
result)返回查询结果(数组形式)
(2)插入DB::insert(‘插入语句’);||DB::table(‘tablename’)->insert([‘name’=>’str1’,’name2’=>’str2’])返回布尔值
(3)更新(准确更新、自增自减【一定要带条件,条件跟在table名后面】
DB::update(‘更新语句’); //返回修改行数
DB::table(‘tablename’)->where(‘columnname’,’str’)->update([‘name’ => ‘str1’]); //返回修改的行数
DB::tabele(”tablename)->increment(‘colnumname’,[num].[‘name’ => ‘str’]); //默认自增1,num设置自增数量,最后一个参数可以在设置自增时修改字段
DB::tabele(”tablename)->decrement(‘colnumname’,[num]); //默认自减1,num设置自减数量
(4)删除DB::delete(‘删除语句’); 返回删除行数
(5)使用查询构造器查询函数
DB::table(‘tablename’)->get(); //获取表中所有数据
DB::table(‘tablename’)[->orderBy(‘id’,’desc’)]->first(); //获取第一条
DB::table(‘tablename’)[->whereRaw(‘col1 > ? and col2 > ?’,[num1,num2])]->pluck(‘colname’); //返回指定字段【多条件查询示范】
DB::table(‘tablename’)->lists(‘col1’[,’col2’]); //返回指定字段,可以以键col2为下标
DB::table(‘tablename’)->select(‘col1’,’col2’,’col3’)->get(); //指定查询的某些字段
DB::table(‘tablename’)->chunk(num,function(){ //查询后执行的操作,return false可以停止查询 }); //分段返回查询的值,每段num条数据
(6)查询构造器中的聚合函数
DB::table(‘tablename’)->count(); //返回表中的数据条数
DB::table(‘tablename’)->max(‘columnname’); //返回列中最大值
DB::table(‘tablename’)->min(‘columnname’); //返回列中最小值
DB::table(‘tablename’)->avg(‘columnname’); //返回列中平均值
DB::table(‘tablename’)->sum(‘columnname’); //返回列中和
五、Eloquent ORM(laravel自带,每个数据表都有一个与之对应的model) 操作数据库
1.在app/建立模型,可用cmd命令建立,与数据表进行关联,默认表名是模型名的复数,若不是,则可在模型类中写入:
protected table=‘tablename′;//手动指定表名protectedprimaryKey = ‘id’; //手动指定主键
2.在控制器中在函数中进行操作数据库模型
modelname::all(); //返回表中数据集合
modelname::find(主键中的值); //通过主键查找表中数据,返回模型对象
modelname::findOrFail(主键值); //通过主键查找表中数据,如果没查到就报错
3.添加相应路由访问控制器
4.使用模型构造器操作数据库(与第四相似)
DB::table(‘tablename’)->where[].. 换成 modelname::where[]…
5.ORM的新增、自定义时间戳、批量赋值
(1)通过模型新增数据(涉及自定义时间戳)
在控制器的方法中操作:
new一个模型对象【eg:student=newStudents();】,然后用student操作;
操作1:增删查改;操作2:save()方法
eg:student−>name=‘name1′;student->age = 18;
student−>save();//返回值为布尔值,默认有时间戳(新增时间、修改时间)并自动维护,若想关闭则可在模型中设置publictimestamps = false;
模型中函数操作:
protected function getDateFormat(){ return time(); } //可以在控制器中通过字段名调用时间戳,默认为格式化(年月日时分秒);
protected function asDateTime(val)return$val;//直接返回数据表中数据,不格式化,在控制器中格式化语句为:echodate(′Y−m−dH:i:s′,student->created_at);
(2)使用模型的Create方法新增数据(涉及到批量赋值)
modelname::create([‘col1’ => ‘str1’,’col2’ =>’str2’]); //默认不可批量赋值,需要在模型中加入语句:【protected fillable=[′col1′,′col2′];//指定允许批量赋值的字段;protectedguarded=[]; //设置不允许批量赋值的字段】,返回值为表模型;
(3)firstOrCreate()函数 //查找,若没有则新增
eg:modelname::firstOrCreate([‘colname’ => ‘str’]);
(4)firstOrNew()函数 //以属性查找,若没有则创建新的实例,需要保存自己调用save();
eg:modelobj = modelname::firstOrNew(['colname' => 'str']);
$modelobj->save();
(5)通过模型更新数据
eg:$obj=modelname::find(keyname);
$obj->colname='str';
(6)结合查询语句批量更新
eg:modelname::where()->update([]);
(7)通过ORM删除 数据
eg:$modelobj=modelname::find(key);
$modelobj->delete();
(8)通过主键删除
tablename::destory(keynum1,num2); //返回值为删的记录值,也可把主键值写到数组中
(9)根据条件删除
tablename::where()->delete();
六、Blade模板引擎(view的使用)
1、简介
Blade是一种模板引擎,可在view中使用php原生代码,所有的Bland视图页面都将被编译成原生的php代码并缓存起来,模板文件修改才会重新编译(不给应用增加负担)。
2、模板继承(section、yield、extends、parent)
优点:减少代码重复率,提高相同页面部分利用率
位置:在resource>views中,命名为viewname.blade.php,使用时指定viewname即可(例如使用views中的student文件夹下模板:view(‘student.viewname’),点和斜线都可以)
(1)section既可用来定义视图片段,又可扩展子模版
用法:@section(‘’)
….content
@show
(2)yield用来展示某个指定section的内容,相当于占位符,用子模版去实现(不可扩展)
(3)在子模版中实现布局(section)
· @extends('view目录下的模板')
·重写某个部分(section)
@section('sectionname')
[@parent] //继承视图中的内容,不加为完全重写
.....内容
@end
(4) 在子模版中实现布局(yield)
@section('sectionname')
.....内容 //重写所有内容
@end
3.基础语法及include的使用
(1){{ $变量名 }} //模板中输出php变量【在section中操作】 变量在控制器中,也可在控制器返回view时传变量
(2){{ 函数名(参数) }} //
(3){{ $name or 'default' }} //若变量name不存在就输出default
(4)@{{ $name }} //原样输出
(5){{--模板中注释--}} //在页面源代码中看不到
(6)@include('路径'[,'变量名' =>'内容']) //引入子视图,变量是从子视图中传入的,在引入时给参数赋值
4.模板中的流程控制(if,)
(1)@if (语句) {...输出的语句}
@elseif(语句) {..输出的语句}
@else {...}
(2)@unless(返回布尔值语句) //x相当于if的取反
(3)@for($i = 0;$i<5;$i++)
语句(可以是带html标签的内容)
@endfor
(4)@foreach($name as $i)
...//对$i进行操作
@endforeach
(5)@forelse($name as $i)
...//对$i进行操作
@empty
...//当数组为空时的操作
@endforelse
5.模板中的url(url(),action(),route())
(1)href="url('routename')" //通过路由的名字生成url,常用
(2)href="action('controllername@方法名')"//通过指定控制器和方法名生成url
(3)href="route('别名')"//通过route的别名生成url,常用
七、中间件闭包的使用
1.闭包的概念
Closure,匿名函数,又称为Anonymous function(没有定义名字的函数),简单来说就是直接将未命名的函数赋给变量,可以直接用变量来调用函数。
eg:$f=function($i){ $i }; function b(Closure $closure){ return $closure;} b($f(2));
闭包可以作为参数,也可以作为函数返回值。