Laravel
简介
Laravel是一套简洁、优雅的PHP Web开发框架
运行环境要求
PHP >= 5.5.9 PHP版本5.5.9
OpenSSL 对数据进行加密
mbstring mbstring 提供了针对多字节字符串的函数,能够帮你处理 PHP 中的多字节编码
Mcrypt PHP 扩展 提供多种算法
Tokenizer 能够对php代码进行分割
扩展打开
phpinfo()
通过phpinfo去查找文件
D:\wamp\bin\php\php5.6.15\php.ini 找到配置项打开
D:\wamp\bin\php\php5.6.15\ext 扩展文件存放地址
重启apache
安装
composer 安装完毕
composer create-project laravel/laravel 项目名称 --prefer-dist "5.1.*"
配置
程序秘钥
\wamp\www\laravel-v5.1.11>php artisan key:generate
修改时区
config/app
timezong => 'PRC';
修改数据库返回的结果值类型
文件位置
config/databases.php
修改项
'fetch' => PDO::FETCH_CLASS,
获取和设置配置
Config::get('app.timezone');
Config::set('app.locale', 'cn');
关闭和重启应用
关闭 php artisan down
resources\views\errors\503.blade.php
启动 php artisan up
resources\views\welcome.blade.php
路由
文件位置
app/Http/routes.php
基本路由
Route::get('/test',function(){});
Route::post('./post',function(){});
带参数的路由
普通使用
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
限定参数类型
Route::get('/param/{name}', function($name){
return $name;
})->where('name','[a-z]+');
传递多个参数
Route::get('/getParams/{name}/{id}', function($name, $id){
//请求对象
// echo $name;
// echo $id;
});
路由别名
Route::get('/Home/Goods/show/{id}', ['as'=>'goods', 'uses'=>function($id){
//普通创建url
// echo url('/param/hahah').'<br>';
//路由别名创建url
// echo route('goods',['id'=>11]).'<br>';
//实现页面跳转
// return redirect()->route('goods',['id'=>12]);
//获取路由名称
return Route::currentRouteName();
}]);
路由组的设置
Route::group([], function(){
Route::get('/404', function(){
abort(404,'not found!!!');
});
});
404页面设置
设置模板 -> resources/views/errors/404.blade.php
csrf保护
form
{{ csrf_field() }}
发送ajax请求
1.在head头里面加入<meta name="csrf-token" content="{{ csrf_token() }}">
2. $.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
中间件
作用
身份验证之外,中间件也可以被用来运行各式各样的任务
安装
php artisan make:middleware LoginMiddleware
实例代码
<?php
namespace App\Http\Middleware;
use Closure;
class LoginMiddleware
{
public function handle($request, Closure $next)
{
//request变量 记录所有的请求参数
if($request->session()->has('id')){
//通过session 来检测用户是否登录
//进入下一层 请求
return $next($request);
}else{
//跳转到指定的路由方法
return redirect('login');
}
}
}
路由注册
Kernel.php >>>> $routeMiddleware成员属性
'login' => \App\Http\Middleware\LoginMiddleware::class,
使用
Route::group(['middleware' => 'login'],function(){
Route::get('/admin',function(){
echo '这里是后台的首页';
});
Route::get('admin/user',function(){
echo '这是后台的用户界面';
});
});
Route::get('/middleware',function(){
echo '这是中间件的显示';
})->middleware('login');
控制器
创建一个控制器
php artisan make:controller UserController(控制器的名称)
访问路由
Route::get('/User/add', 'UserController@add');
带参数访问
Route::get('/User/edit/{id}', 'UserController@edit');
别名
设置 Route::get('/User/index', ['uses' => 'UserController@index','as' => 'user']);
使用
route('');
中间控制
Route::get('/user/edit/{id}', [
'middleware' => 'login',
'uses' => 'TestController@edit']
);
隐式控制器
路由
Route::controller('users', 'UserController');
使用
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
/**
* 响应/users的GET请求
*/
public function getIndex()
{
//
}
/**
* 响应/users/show/1的GET请求
*/
public function getShow($id)
{
//
}
}
资源控制器
创建: php artisan make:controller PhotosController
使用:Route::resource('photos', 'PhotosController');
请求
基本信息获取
请求路径
$request->path()
检查路径
$request->is('admin/*')
获取完整url
$request -> url()
获取请求的方式
$request->method();
检测当前请求的方式
$request->isMethod('post')
获取请求参数
$name = $request->input('name');
默认值设置
$request->input('name', 'Sally');
检查值是否存在
$request->has('name')
获取所有参数
$request -> all()
提取部分
$request->only(['username', 'password']);
获取指定
$request->except(['credit_card']);
除了当前给定
闪存信息
将所有的请求参数写入闪存中
$request->flash()
案例:用户名:<input type="text" name='username' value="{{ old('username') }}">
将部分参数写入闪存中
$request->flashOnly('title','price')
将某些值去除后存到闪存中
$request->flashExcept('_token');
简便使用
return back()->withInput();
文件操作
检测是否有文件上传
$request->hasFile('photo')
将文件移动到制定位置
$request->file('photo')->move('./uploads/', 'iloveyou.jpg');
获取文件的后缀
$request -> file('file') ->getClientOriginalExtension();
cookie
设置
\Cookie::queue('name','iloveyou',10);
设置cookie的时间为10分钟
return response('haha')->withCookie('uid',10,10);
读取
$request->cookie('name');
\Cookie::get('name');
session
设置: session(['key'=>'value'])
获取: session('key')
响应
显示模板
return view('goods.add');
返回json
return response()->json(['a'=>100,'b'=>2000]);
下载文件
return response()->download('web.config');
页面跳转
return redirect('/goods/add');
视图
解析模板
return view('index')
分配数据到模板
view('user.edit',['username'=>'admin'])
模板引擎 blade
模板的默认存放位置
resources/views
占位符
@yield('title')
@section('content')
@show
新模板内容
@extends('index')
@section('title', 'new Title')
@section('content')
new contents is here
@endsection
使用变量
{{$username}}
使用注释
{{-- 内容 --}}
使用函数
{{ time() }}
设置默认值
{{ $str or 'aaaaaaa' }}
显示html代码
{!! $name !!}
引入子视图
@include('header')
流程控制
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
循环控制
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
数据库操作
支持数据库的类型
MySQL
Postgres
SQLite
SQL Server
数据库链接配置
文件位置
config/database.php
结果集的返回类型
'fetch' => PDO::FETCH_ASSOC
.env环境快速配置
数据库基本操作
注意:将类导入
查询
DB::select('select * from users where active = ?', [1]);
插入
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
修改
DB::update('update users set votes = 100 where name = ?', ['John']);
删除
DB::delete('delete from users');
一般语句
DB::statement('drop table users');
事务操作
开启事务 DB::beginTransaction();
提交事务 DB::commit()
回滚事务 DB::rollBack()
查询构造器
增删查改
查询
查询所有 DB::table('users')->get()
查询单条 DB::table('users')->first()
查询字段 DB::table('users')->select('name', 'email as user_email')->get()
插入
单条
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
多条
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
获取ID插入
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
删除
DB::table('users')->where('id', '<', 100)->delete();
修改
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
连贯操作
条件
DB::table('users')
->where('name', 'like', 'T%')
->get()
DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
DB::table('users')
->whereBetween('votes', [1, 100])->get()
DB::table('users')
->whereIn('id', [1, 2, 3])
->get()
排序
orderBy('name', 'desc')
分页
DB::table('users')->skip(10)->take(5)->get();
表链接
DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
计算
总和
DB::table('users')->count()
最大值
DB::table('orders')->max('price')
平均值
DB::table('orders')->avg('price')
设置自定义函数和自定义类文件
在app中创建文件夹 App\common\function.php
在composer.json 添加files选项
"autoload": {
"classmap": [
"database"
],
"files":[
"App/common/function.php"
]
},
更新composer
composer dump-auto
调试工具
debugbar安装
composer require barryvdh/laravel-debugbar v2.4.0
在config/app.php里面的providers添加
Barryvdh\Debugbar\ServiceProvider::class,
sql打印 方法一
在路由文件添加
DB::listen(function($sql, $bindings, $time) {
// dump($sql);
});
打印sql 方法二
DB::connection()->enableQueryLog(); // 开启查询日志
\DB::table('xxx'); // 要查看的sql
$queries = \DB::getQueryLog(); // 获取查询日志
print_r($queries); // 即可查看执行的sql,传入的参数等等