laravel 安装
通过composer安装laravel
composer create-project --prefer-dist laravel/laravel=5.6.* www.blog.com
# 创建项目
create-project
# 以压缩方式下载
--prefer-dist
# 下载的版本
laravel/laravel=5.6.*
# 自定义项目名称
www.blog.com
composer require 安装指定的源码包
composer self-update 软件更新
composer autoload-dump
composer dump
更换国内源
composer config -g repo.packagist composer https://packagist.phpcomposer.com
备选
composer config -g repo.packagist composer https://packagist.laravel-china.org
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
phpstorm支持插件安装
composer require barryvdh/laravel-ide-helper --dev
#config/app中添加
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
# terminal运行
php artisan ide-helper:generate
composer require barryvdh/laravel-debugbar --dev
Barryvdh\Debugbar\ServiceProvider::class,
composer require mpociot/laravel-test-factory-helper --dev
Mpociot\LaravelTestFactoryHelper\TestFactoryHelperServiceProvider::class,
3、mpociot/laravel-test-factory-helper
输入指令php artisan test-factory-helper:generate后,database/factory/ModelFactory.php模型工厂文件会自动生成各个模型对应字段数据。Faker是一个好用的生成假数据的第三方库,而这个开发插件会自动帮你生成这些属性,不用自己写了
运行laravel框架
- 命令行模式运行
php artisan serve
php artisan serve --port=8000
Laravel5.5在nginx访问自定义路由返回404错误
nginx解决办法:
在location /里面加上 try_files $uri $uri/ /index.php?$query_string;
如果配置文件中存在 try_files $uri $uri/ =404;需要将它注释掉或者删掉,否则会报错
location /{
root /root/laravel_test/public;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
四种定义路由的规则
Route::请求方式('uri', 匿名函数);
Route::请求方式('uri', 控制器名@方法名);
# 从服务器获取资源(一项或多项) select
Route::get($uri, $callback);
# 在服务器新建一个资源 insert
Route::post($uri, $callback);
# 在服务器更新资源 update
Route::put/patch($uri, $callback);
# 从服务器删除资源 delete
Route::delete($uri, $callback);
Route::match(['get', 'post'], 'req', function(){
return 'get.post';
});
Route::any('/req', function(){
return 'any';
});
路由参数
# 必填
Route::get('article1/{id}',function($id){
dump($id);
});
# 可选参数
Route::get('article2/{id?}',function($id = 0){
dump($id);
});
# 参数限制
Route::get('article3/{id}', function($id){
dump($id);
})->where(['id'=>'\d+']);
路由别名
# 方便管理生成的url
Route::get('qq/{id}', function($id){
dump($id);
})->name('index.req');
Route::get('qq1/{id}', function($id){
# 方便权限控制
return route('index.qq');
});
路由分组
# 路由前缀
Route::group(['prefix' => 'admin'], function(){
Route::get('index', function(){
return 'admin.index';
});
});
查看定义好的路由
# 查看定义好的路由
php artisan route:list
控制器创建
# 一般控制器创建
php artisan make:controller HelloworldController
#
php artisan make:controller LoginController -r [--resource]
#
php artisan make:controller Admin/LoginController -r
控制器目录下
# 控制器目录下
Route::group(['namespace' => 'Admin'], function(){
Route::get('admin/index', 'LoginController@index');
});
Route::get('admin/index', 'Admin\LoginController@index')->name('admin.index');
请求
Input::get('参数的名称', '没有参数的默认值');
# 获取用户所有的输入
Input::all();
# 获取指定的输入 白名单
Input::only([]);
# 获取指定之前的所有输入 黑名单
Input::except([]);
# 判断某输入是否存在
Input::has('名称');
Request 依赖注入
$request->get();
$request->all();
$request->only();
$request->except();
$request->has();
$request->isMethod();
$request->cookie();
返回
return 'string'; or echo "string";
# 投置cookie
response('')->cookie('id', 111, 10, '/');
# cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly);
#读取cookie
request()->cookie('id');
重定向
# 路由别名
return redirect()->route('路由别名');
json返回数据
return response()->json(['key'=>'value']);
视图
# 模版 /resources/views/
view('模版');
view('index.html');
view('index.html', ['data'=>$data]);
view('index.html', compack('data'));
view('index.html')->with(['data'=>$data]);
模版赋值
{{ $data['id'] }}
三元运算
{{ $data['id'] or '没有值' }}
未转义的输出
$title = "<a href='www.baidu.com'>百度</a>"
{!! $title !!}
原形态输出
Hello, @{{$变量名}}
原样输出 vue就可以解析调用
使用函数
{{ date('Y-m-d') }}
if语句
@if (count($recodes) === 1)
我有一条数据
@elseif (count($recodes) > 1)
我有多条数据
@else
我没有数据
@endif
foreach
@foreach ($usres as $key => $user)
{{ $user->name }}
# 当前循环迭代的索引 起始为0
$loop->index;
@endforeach
@forelse ($users as $key => $user)
@empty
如果没有就是这个
@endforelse
模版包含
@include('public.header');
# 表示 view/public/header.blade.php文件
模版继承
# 模版继承
@extends('public.main')
# 赋值第一次方法
@section('title', '我是去赋值的')
# 赋值第二次方法
@section('content')
<div>我就是一个去赋值的</div>
@endsection
# 点位符
@yield('title')
表单验证
# 控制器
$this->validate($request, [
'username' => 'require|min:18'
],[
'username.require' => '姓名不能为空',
'username.min' => '姓名不能少于18位'
]);
# 模版 错误展示
@if($errors->any())
@endif
# 正确回显
{{ old('username') }}
# 生成验证规则
php artisan make:request UserRequest
rules
csrf
# 5.6
@csrf
{{ csrf_token() }}
{{ csrf_field() }}
把默认的报错信息换成中文
packagist.org
lang
数据库
utf8mb4 utf8mb4_union_ci
# 加个表前缀
.env
config/databases
插入数据
$sql = "insert into table(username, password) values (:username, :password)";
DB::insert($sql, ['username'=> 'admin', 'password' => 'admin88']);
$sql = "update table set name=:name where id=:id";
DB::update($sql, ['name'=>'hah', 'id'=>1]);
$sql = "select * from table where id=:id";
DB::selectOne($sql, ['id' => 1]);
$sql = "select * from table";
DB::select($sql);
$sql = "delete table where id=:id";
DB::delete($sql, ['id' => 1]);
# 查询所有 get 还条件 all不能带条件
DB::table('table')->where('id', '>=', 10)->get(['name', 'age']);
DB::table('users')->when($kw, function($query) use ($kw){
$query->where('username', 'like', "%100%")
})->get();
# 获取单条数据
->first();
# 获取某个具体的值
->value('name');
# 获取一列数据
->pluck('name','id');
# 排序操作
->orderBy('sort', 'desc');
# 查询总记录条数
->count();
# 分页获取
->offset(0)->limit(2)->get()
# 添加数据
DB::table('table')->insert([
'name' => 'admin'
]);
DB::table('table')->instertGetId([
'name' => 'admin'
]);
# 修改
DB::table('users')->where('id', 1)->update([
'name' => 'admin'
]);
# 删除
DB::table('users')->where('id', 1)->delete();
数据库迁移
# create_test_table 生成文件的后缀名称 --create=test生成表名为test的数据表
php artisan make:migration create_test_table --create=test
# 执行数据迁移
php artisan migrate
# 执行数据回滚
php artisan migrate:rollback
# 清除后再回滚
php artisan migrate:refresh
数据填充
php artisan make:seeder TestTableSeeder{种子文件名}
执行数据填充
php artisan db:seed --class=执行种子文件名称
php artisan db:seed
php artisan migrate:refresh --seed //databaseseeder文件中定义call方法
创建模型
php artisan make:model 目录名称/模型名称
php artisan make:model Models/Article
# 生成迁移文件
php artisan make:model Models/Article -m
模型限制
$table = '';
$primaryKey = '';
public $timestamps = false;
# 白名单
$fillable = [];
# 黑名单
$ guarded = [];
添加数据
(new model)->save($data);
model::insert($data);
model::create($data)
# 模型识别
php artisan ide-helper:models
修改数据
查询--修改--save
save();
update();
删除
# 真删除
delete();
destory($id);
# 输删除
1. 字段中要有deleted_at
2. 模型中引入 trait SoftDeleted
3. $dates = ['deleted_at'];
数据填充
faker
模型中database/seeds中添加
php artisan make:factory ArticleFactory -m Models/Aritcle
模型
# -m生成迁移文件
php artisan make:model Models/Article -m
php artisan make:seeder ArticleSeeder
database/seeds/DatabaseSeeder.php
$this->call(Article::class);
# -m 指定模型
php artisan make:factory ArticleFactory -m Models/Article
安照迁移文件内容写数据文件
database/seeds/ArticleSeeder.php
# 10条数据 app配置文件中加上locate_faker = 'zh_CN'
factory(Article::class, 10)->create('zh_CN');
php artisan migrate:refresh --seed
模型监听器 自动完成字段值
php artisan make:observer ArticleObserver
creating created updating updated deleting deleted
Models/Article
protect $dispechEven = ['creating', Article::class];
protect static function boot() {
static::observer(ArticleObserver::class);
}
数据分页
Article::paginate(env('PAGESIZE'))
{{ $data->appends(request()->except(['page'])->links() }}
session
# 投置session
Session::put('键名','值');
session('键名','值');
# 读取
Session::get(值, 默认值)
session();
session()->all()
# 判断
Session::has('')
session()->has()
# 删除 一个
Session::forget('名称');
session()->forget('名称');
# 删除全部
Session::flush();
session()->flush();
闪存数据 只能保留到下一个HTTP请求,然后就会删除
Session::flash('msg','你好世界');
session()->flash('msg','你好世界');
redirect()->route('session.index')->with('msg','你好世界')
中间件
php artisan make:middleware 中间件名
# 全局中间件
# 路由中间件
设置缓存
use Cache;
Cache::add(key, value, time);
Cache::put(key, value, time);
# 设置永久
Cache::forever(key, value)
# 获取
Cache::get(key)
Cache::get(key, default)
Cache::get(key, function(){})
# 获取的同时并存储
Cache::remember('user', $time, function(){
return key 不存在时反回的数据
})
Cache::has(key)
# 先获取再删除
Cache::pull('key')
Cache::forget('key')
Cache::flush();
快捷键
phpstorm setting Tools Command Line Supporty + 别名 artisan路镜 ctrl+shift+x
文件上传
# 获取文件后缀
$file = $request->file('文件表单名称')->getClientOriginalExtension();
$request->hasFile('文件表单名称');
$request->file(文件表单名称')->move(path, name);
关联表
# 一对一
$this->hasOne('关联model', ['关联model的联系键'],['本model的联系键']);
return $this->hasOne(User::class, ['user_id'], ['id'])
控制器中使用
$user = user::with('userinfo')->where('id', 1)
$user->userinfo->body;
# 一对多
$this->hasMany('关联model', ['关联model的联系键'],['本model的联系键']);
return $this->hasMany(User::class, ['user_id'], ['id'])
控制器中使用
$user = user::with(['article'=>function($query){
$query->where('id', '>', 1);
}])->where('id', 1)->first();
$user->article
# 多对多
$this->belongsToMany('关联model', '中间表表名','中间表本model的关联ID','中间表中关联model的关联ID');
$this->belongsToMany(App\User::class,'user_auth_table','user_id','auth_id')
$user->find(1)->auths->toArray()
$request->route()->getName();//获取别名
$user->auths()->sync([1,2]);