开发环境:
php7.0
安装包从官网下载,解压即可
目录结构:
app:应用程序的核心代码
app/http:业务逻辑代码
app/http/controller:controller代码块
bootstrap:框架的启动和框架自动加载配置的文件夹
config:包含所有应用程序的配置文件
database:数据库迁移额填充文件
public:包含入口和项目的静态资源文件
resources:视图、原始的资源文件
resources/views:视图层
storage:编译后的模板文件,缓存日志等
tests:单元测试目录
vendor:composer依赖的模块,第三方库
路由
作用:建立url和程序之间的映射
请求类型:get、post、put、patch、delete
基本路由:
//get
Route::get('url',function(){
return 'hello world';
});
//post
Route::post('url',function(){
return 'hello post';
});
多请求路由:
//mactch指定响应方式
Route::mactch(['get','post'],'url',function(){
return 'hello match';
});
//any响应所有方式
Route::any('url',function(){
return 'hello any';
})
路由参数:
//传入get参数
Route::get('user/',function($id){
return $id;
});
//默认get参数
Route::get('user/{id?}',function($id=10){
return $id;
})
//正则表达式限制参数
Route::get('user//{name?},function($id,$name='labmem'){
return $name;
}')->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);
路由别名:
Route::get('user/name',['as'=>'name',function(){
return 'user name';
}]);
路由群组:
Route::group(['prefix'=>'labmem'],function(){
Route::get('user/name',['as'=>'name',function(){ //URL:labmem/user/name
return route('name');
}]);
Route::any('url',function(){ //URL:labmem/url
return 'hello url';
});
});
路由中输出视图:
Route::get('view',function(){
return view('welcome');
});
路由关联控制器Controller:
Route::get('user/index','UserController@index');
或
Route::get('user/index',['uses'=>'UserController@index']);
//别名:
Route::get('user/index',[
'uses'=>'UserController@index',
'as'=>'userindex'
]);
//可以直接传入参数到controller方法中
Route::any('user/',['uses'=>'UserController@index']);
public function index($id){
return $id;
}
数据库操作:
首先要引入DB类
use Illuminate\Support\Facades\DB;
一、DB facade(sql语句操作)
//新增
$bool=DB::insert('insert into user(name,age) values(?,?)',[$name,$age]);
//更新
$num=DB::update('update user set age=? where name=?',[$age,$name]);
//查询
$array=DB::select('select * from user');
//删除
$num=DB::delete('delete from user where id=?',[$id]);
二、查询构造器操作数据库
基本满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行
与tp5类似
//使用查询构造器新增数据(insert)
$bool=DB::table('user')->insert(['name'=>$name,'age'=>$age]); //返回bool值
$num=DB::table('user')->insertGetId(['name'=>$name,'age'=>$age]); //返回自增ID
//使用查询构造器更新数据(update,increment,decrement)
$num=DB::table('user')->where('id',$id)->update(['age'=>$age]); //返回受影响行数
$num=DB::table('user')->where('id',$id)->increment('age'); //id的age增1,返回受影响行数
$num=DB::table('user')->increment('age',3); //age自增3
自减是decrement()
$num=DB::table('user')->where('id',$id)->decrement('age',3,['name'=>$name]); //id的age自减3并且修改name
//使用查询构造器删除数据(delete,truncate)
$num=DB::table('user')->where('id','>=',$id)->delete(); //删除id>=的记录,返回删除的行数
DB::table('user')->truncate(); // 整表删除,不返回任何东西,很危险!!!
//使用查询构造器查询数据(get、first、select、where、chunk、pluck)
$array=DB::table('user')->get(); //获取表所有数据并返回
$array=DB::table('user')->first(); //获取结果集的第一条数据并返回
$array=DB::table('user')->where('id>=? and age>?',[$id,$age])->get(); //多条件查询
$array=DB::table('user')->pluck('name'); //返回所有name字段值的数组
$array=DB::table('user')->select('id','name','age')->get(); //只返回这三个字段的数据
DB::table('user')->chunk(1000,function($users){
var_dump(#users);
if(条件)
}); //每次查1000条查完结束
//查询构造器中的聚合函数(count、avg、max、sum、min)
$num=DB::table('user')->count(); //返回表的记录数
$max=DB::table('user')->max('age'); //返回字段(age)中最大的值
$min=DB::table('user')->min('age'); //返回字段(age)中最小的值
$avg=DB::table('user')->avg('age'); //返回字段(age)的平均值
$sum=DB::table('user')->sum('age'); //返回字段(age)的和
三、Eloquent ORM
Eloquent ORM 是真正体现Laravel“优雅”的设计,是“让开发者真正关注业务而不是底层代码”
每个数据表都有一个与之对应的“模型model” 用于和数据表的交互
需要引用use Illuminate\Database\Eloquent\Model;并继承Model
指定表名:protected $table='user';
指定主键(id):protected $primaryKey='id';
//控制器需要引入需要的模型然后
//ORM查询数据
$users=User::all(); //返回user所有值的User对象
$user=User::find(123); //返回一个User对象
$user=User::findOrFail(123); //根据主键查找,如果没找到就报错
//查询构造器在ORM中的使用
$users=User::get();
$user=User::where('id','>','123')->orderBy('age','desc')->first();
User::chunk(2,function($users){
var_dump($users);
});
$num=User::count();
$max=User::max('age');
//ORM新增数据、自定义时间戳及批量赋值
$user=new User();
$user->name=$name;
$user->age=$age;
$bool=$user->save();//返回bool值
默认开启时间戳created_at/updated_at,关闭在模型类写
public $timestamps=false;
设置Unix时间戳:
protected function getDateFormat(){
return time();
}
设置取出非格式化Unix时间戳:
protected function asDateTime($val){
return $val;
}
//使用模型的Create方法新增数据
//在模型中添加允许批量赋值的字段
protected $fillable=['name','age'];
//在控制器使用create
$user=User::create(
['name'=>$name,'age'=>$age]
);
//指定不允许批量赋值的字段
protected $guarded=[];
//firstOrCreate();通过字段查找,如果没有则新增并取得新的实例
$user=User::firstOrCreate(
['name'=>$name]
);
//firstOrNew();通过字段查找,如果没有则创建新的实例,若需要保存,则自行调用save
$user=User::firstOrNew(
['name'=>$name]
);
$bool=$user->save();
//ORM修改数据
//通过模型更新数据
$user=User::find($id);
$user->name=$name;
$bool=$user->save();
//结合查询语句批量更新
$num=User::where('id','>',$id)->update(
['age'=>$age]
);
//ORM删除数据
//通过模型删除
$user=User::find($id);
$bool=$user->delete();
//通过主键删除
$num=User::destroy($id); //可以删除多条destroy($id1,$id2)或者destroy([$id1,$id2])
//删除指定条件的数据
$num=User::where('id','>',$id)->delete();
Blade模板引擎
模板继承:在视图层创建一个模板供其他模板继承
在父模板中使用:
@section('')
@show
和
@yield('','')
来定义继承者修改的地方
在子模板中使用
@extends('')来继承父模板,直接写view下的路径
重写section:
@section('')
XXXXX
@stop
重写yield:
还是@section('')
xxxx
@stop
@section和@yield的区别 :
@section既可以单独显示父模板的默认内容,也可以单独显示子模板的新内容,通过@parent还可以同时显示父子模板中的内容 ;
而@yield只能显示其中一个,子模板不定义,就用父模板默认的,子模板定义,父模板的内容会被覆盖,通过@parent也不能显示。
模板的基础语法及include的使用
在控制器中调用视图层view()可传值,和tp5相似
return view('index',[
'name'=>$name
]);
在模板中可使用{{$name}}来输出参数
2、模板中调用php代码
{{ time() }} //输出Unix时间戳
{{ date('Y-m-d H:i:s',time()) }} //格式化时间戳
{{ isset($name) ? $name : 'default' }} == {{ $name or 'default' }}
。。。
3、原样输出
@{}
4、模板中的注释
{-xxxxxxx-}
5、引入子视图 include
@include('') //views下路径
可传值,例:
@include('index.message',['message'=>'错误信息'])
6、流程控制:if、unless、for、foreach
//IF
@if($name=='labmem')
我是labmem
@elseif($name=='lty')
我是lty
@else
我是谁?
@endif
//unless等于if的取反
@unless($id==1)
xxx
@endunless
//for
@for($i=0;$i<10;$i++)
xxx
@endfor
//foreach
@foreach($users as $user)
<p> {{$user->name}}</p>
@endforeach
//forelse 如果有数据就遍历
@forelse($users as $user)
<p>{{ $user->name }}</p>
@empty
<p>没有数据</p>
@endforelse
7、模板中的URL
{{url('url')}} //通过路由的名字生成URL
{{action('UserController@index')}} //指定控制器和方法名生成URL
{{route('url')}} //通过路由别名生成URL
基础篇完。。。。
下一篇:laravel框架整理二