laravel
一.简介
二.运行环境要求
1.php 版本>=5.5.9
2.Mcrypt PHP扩展 php的加密扩展,提供多种加密算法
3.openssl扩展 对传输的数据进行加密
4.mbstring扩展 提供了针对多字节字符串的函数,能够帮助处理php多字节编码
5.Tokenizer PHP扩展 php代码片段解析
三.安装
1.composer安装
composer create-project laravel/laravel your-project-name --prefer-dist "5.1.*"
2.直接复制一份安装好的即可
四.本地域名解析与apapche虚拟主机配置(window下)
1.打开:C:\Windows\System32\drivers\etc目录中的hosts文件:
配置信息:127.0.0.1 自定义主机名
2.在apache的conf\extra的httpd-vhosts.conf配置文件中配置
<VirtualHost *:80>
ServerAdmin chenxiaoyu@lampbrother.net
DocumentRoot "虚拟主机目录位置"
ServerName 虚拟主机名
ErrorLog "logs/虚拟主机名-error.log"
CustomLog "logs/虚拟主机名-access.log" common
</VirtualHost>
注:配置虚拟主机出现的问题
①.配置好之后 localhost不能访问
②.配置完成只能访问根目录
③.hosts文件打不开
五.配置
1.开发前必须要做的
①.配置虚拟主机
②.storage 和 vendor 目录要让服务器有写入权限 linux
③.程序密钥
(a).这里是默认生成的,如果没有的话可以使用命令
php artisan key:generate
(b).如果没有key会报错
No supported encrypter found. The cipher and / or key length are invalid.
④.修改时区
config/app.php 'timezone'=>'PRC'
优先建立出来 404 页面
404.blade.php
SEO 搜索引擎优化
2.开发过程中要用到的
①.读取和设置配置
(a).Config::get('app.timezone');
(b).Config::set('app.timezone','PRC');
②.获取环境变量
(a).env('DB_HOST','');
③.关闭和启动应用
(a).关闭 php artisan down 模版配置 resources/views/errors/503.blade.php
(b).开启 php artisan up
④.URL重写
public/.htaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
六.路由:将信息从源地址传递到目的地的角色 abort
1.文件位置:app/Http/routes.php
2.基本路由
①.Route::get('/admin', function () {
return view('useradd');
});
// controller@方法
②.Route::post('/admin', function () {
return view('useradd');
});
使用post方式请求服务器的时候,可以先将http/kernel.php 中的第20行屏蔽
③.Route::put(); //修改
④.Route::delete(); //删除
3.带参数的路由
①.普通使用
Route::get('/goodsinfo/{id}', function ($id) {
echo "商品的id是".$id;
});
?a=123&b=456
②.限制参数类型
Route::get('/user/{id}',function($id){
echo $id;
})->where('id','\d+');
4.传递多个参数
①.Route::get('/user/{name}/{id}',function($name,$id){
echo $name;
echo "<br>";
echo $id;
})->where('id','\d+')->where('name','\d+');
5.路由别名 少
①.Route::get('/admin/user/delete',[
'as'=>'udelete',
'uses'=>function(){
//快速获得改地址
$url=route('udelete');
echo 'ok';
}
]);
6.路由组设置 middleware
①.Route::group([],function(){
});
7.404页面设置
resources/views/errors/404.blade.php
8.CSRF保护
POST 提交 自动执行 csrf
TokenMismatchException in VerifyCsrfToken.php line 53:
开启了csrf的保护
csrf
七.中间件
1.创建(默认不直接生效)
php artisan make:middleware LoginMiddleware
2.事例代码
$ip=$request->ip();
$path=$request->path();
file_put_contents('./ips.txt',$ip.'------'.$path."\r\n",FILE_APPEND);
路径的问题
相对路径 ../ ./ 绝对路径 /
php语言 绝对路径 / 代表 盘符根目录
./ ../ 相对路径 入口文件 所在的目录 public
html的绝对路径 / 当前的域名 所指定的目录 public
在laravel中 php端一律使用相对路径 html端 一律使用绝对路径
echo "<img src='/1.jpg'>";
include ""; 相对路径
3.注册app/Http/Kernel.php
①.全局注册:$middleware 命名空间\类名::class
\App\Http\Middleware\LoginMiddleware::class
①.局部注册:$routeMiddleware 别名=>命名空间\类名::class
'login'=> \App\Http\Middleware\LoginMiddleware::class
4.使用
Route::get('/admin', [
'middleware'=>'admin',
'uses'=>function(){
echo '后台';
},
]);
八.控制器
1.创建控制器
php artisan make:controller UserController --plain
2.路由以及访问
①.普通用法
Route::get('/stu/add','StuController@add');
②.带参数访问
(a).路由带参数
Route::get('/stu/del/{id}',[
'uses'=>'StuController@del',
]);
控制器函数 需要截取形参$id
public function del($id){}
(b).原生参数 ?id=123
public function add(request $request){
$id=$request->input('id');
echo $id;
}
③.别名
Route::get('/stu/del/{id}',[
'as'=>'udel',
'uses'=>'StuController@del',
]);
④.中间件控制
(a).第一种方法
Route::get('/admin', [
'middleware'=>'login',
'uses'=>'StuController@update'
]);
(b).第二种方法
Route::get('/stu/update','StuController@update')->Middleware('login');
⑤.隐式控制器
(a).路由
Route::controller('users','UserController');
//所有请求为users的 都由UserController来完成
注:运行artisan命令的时候 要保证当前脚本不能有报错
post/getStu
(b).使用
控制器中方法起名规则
public function 请求方式+路径(){}
例如:
所访问的路径是 users/add
public function getAdd(){}
⑥.restful 资源控制器
Route::resource('type','TypeController');
九.请求
1.基本信息获取 了解
①.请求方法 $request->method();
②.检测方法 $request->isMethod('post');
③.请求路径 $request->path();
④.请求完整url $request->url();
⑤.获取ip $request->ip();
⑥.获取端口 $request->getPort();
⑦.获取头信息 $arr=$request->header('Connection');
******************************
2.提取请求参数 POST GET
①.提取参数 $request->input('name');
②.设置默认值 $request->input('name','xy');
③.检测是否存在 $request->has('name');
④.提取所有参数 $arr=$request->all();
⑤.提取部分 $arr=$request->only(['username','password']);
⑥.提取部分 $arr=$request->except(['username','password']);
3.文件操作
①.检测是否有文件上传 $request->hasFile('表单name值');
②.将文件移动到指定位置 $request->file('表单name值')->move('路径','新名字');
路径的问题
前台 html代码
绝对路径 / 域名 直接 绑定的 那个文件夹 public里面的东西
不能写相对路径
php
绝对路径 / 当前项目所在的盘符的根目录
相对路径 ./ 当前入口文件所在的路径
总结 laravel里面 html代码 绝对路径 php代码 相对路径
echo "<img src='1.jpg'>"; html 绝对路径
include file_get_content fopen ....... php 函数
4.cookie操作
①.设置 \Cookie::queue('cookie名','cookie值',过期时间);
return response('')->withCookie('cookie名','cookie值',过期时间);
②.读取 \Cookie::get('name');
$request->cookie('name');
//路由的路径的名字 和 public里面的文件夹的名字千万不要同名 同名 默认走的public里面的文件夹 *****************
5.闪存信息:基于SESSION 用来存储请求参数的 session 关闭浏览器 flash 只要刷新一下页面 就失效 主要用来做注册
①.将所有的请求参数写入闪存中 $request->flash();
②.将部分参数写入闪存中 $request->flashOnly('参数1','参数2'..);
③.除去某些参数之外的参数 $request->flashExcept('参数1');
④.简便使用 return back()->withInput();
获取闪存的参数 old('参数')
十.响应
1.返回字符串 return "string"; 相当于 echo
2.设置cookie return response('')->withCookie('名','值',时间);
3.返回json return response()->json(["a"=>100,"b"=>2000]);
4.下载文件 return response()->download('web.config');
5.页面跳转 return redirect('/goods/add'); return back(); //返回上一页
6.显示模版 return response()->view('user'); return view('');
十一.视图
1.解析模版 view('user.add'); // \ / 都可以
2.分配数据到模版
view('user.add',[]);
3.模版引擎blade
①.模版的默认存放位置 resource/views
②.使用变量 {{$username}}
③.设置函数 {{time()}}
④.设置默认值 {{$user or 'guest'}}
⑤.显示html代码 {!! $name !!}
⑥.引入子视图 @include('header')
⑦.模版继承 @extends('index')
(a).占位符 @yield('title')
@section('content')
@show
(b).新模板内容
@section('title','new Title')
@section('content')
[ @parent ]
新内容
@endsection
4.流程控制
① 判断
@if($t==1)
处理
@elseif(count($records)>1)
处理
@else
处理
@endif
②.循环控制
@for($i=0; $i<10; $i++)
处理
@endfor
@foreach($users as $k=>$v)
处理
@endforeach
十二.数据库操作
1.支持的数据库类型
mysql Postgres SQLite SQLServer
2.数据库连接配置
①.文件位置 config/database.php
②..env环境快速配置
3.数据库基本操作
***********************************************
使用数据库的类的时候 一定要在上面现引入命名空间
use DB;
否则
Class 'App\Http\Controllers\DB' not found
***********************************************
①.查询 DB::select()
②.插入 DB::insert
③.更新 DB::update
④.删除 DB::delete
//上面的都不要记住
⑤.一般语句 DB::statement('drop table users');
* ⑥.事务操作 DB::beginTransaction()
DB::rollBack()
DB::commit()
* ⑦.操作多个数据库 DB::connection('数据库别名')->select();
4.构造器
①.增删改查
(a).插入
单条: DB::table('stu')->insert(['name'=>'xy','age'=>46]);
多条: DB::table('stu')->insert([['name'=>'xy','age'=>46],['name'=>'xy','age'=>46]]);
获取id插入: $id=DB::table('stu')->insertGetId(['name'=>'xy','age'=>46]);
(b).更新
DB::table('stu')->where('id',1)->update(['name'=>'xy'])
(c).删除
DB::table('stu')->where('id','<','100')->delete();
(d).查询
查询所有: DB::table('stu')->get()
查询单条: DB::table('stu')->first();
查询单条结果中的某个字段 DB::table('stu')->value('name')
获取一列数据 DB::table('stu')->lists('name')
②.连贯操作
(a).设置字段名 DB::table('stu')->select('name','email as user_email')->get();
(b).条件
DB::table('stu')->where('name','like','%a%');->get();
DB::table('stu')->where('name','>','100')->orwhere('name','xy')->get()
DB::table('stu')->whereBetween('id',[1,5])->get()
DB::table('stu')->whereIn('id',[1,2,3])->get()
(b)排序 orderBy('name','desc');
(c)分页 DB::table('stu')->skip(10)->take(5)->get();
(d)分组 DB::table('stu')->groupBy('name')->having()->get();
(e)连接表 DB::table('stu')->join('class','stu.cid','=','class.id')->select('stu.name','class.cname')->get();
(f)计算
总数 DB::table('stu')->count();
最大值 DB::table('stu')->max('price') // min
平均值 DB::table('stu')->avg('price')
5.sql语句记录
①. app/Providers/AppServiceProvider.php
boot方法中添加
DB::listen(function($sql,$bindings,$time){
//写入sql
file_put_contents('.sqls',"[".date("Y-m-d H:i:s")."]".$sql."\r\n",FILE_APPEND);
});
②.
routes.php
Event::listen('illuminate.query',function($query){
var_dump($query);
});
十三.设置自定义函数和自定义类文件
1.建立出自定义文件 例如:app/common/function.php
2.在项目下的composer.json中添加信息
"autoload":{
"classmap":[
"database"
],
"psr-4":{
"App\\":"app\"
},
"files":[
"app/common/function.php"
]
}
3.dos界面当中composer dump-auto
十四.调试工具
1.debugbar安装
composer require barryvdh/laravel-debugbar
在config/app.php里面的providers添加
Barryvdh\Debugbar\ServiceProvider::class,
2.chrome 插件 postman 翻墙 安装
防止csrf攻击
打开 app/kernel.php 第20行
{{csrf_field()}} 生成了一个hidden 表单提交
{{csrf_token()}} 生成了一个 token字符串 ajax