laravel笔记
composer
composer基本使用
- 在指定文件夹下创建composer.json,填写相关的配置(注意:文件中所有的引号都是双引号,json字符串的格式不能有误)
{
"require":{
"endroid/qrcode":"1.7.3"
}
}
- 在命令行下执行composer install(执行命令的时候,一定要将命令行的目录 切换到创建composer.json文件下)
- 创建php脚本,并且要引入vendor文件夹下的autoload.php
- 查看文档,使用工具包
更新composer.json文件
- 修改文件
{
"require:"{
"endroid/qrcode":"1.7.3",
"gregwar/captcha":"v1.1.1"
}
}
2.更新
composer update
软件更新
composer self-update
laravel
运行环境
- php版本>=5.5.9
- Mcrypt PHP扩展 (php的加密扩展,提供多种加密算法)
- openssl扩展 (对传输的数据进行加密)
- mbstring扩展(提供了针对多字节字符串字节编码)
- Tokenlzer PHP扩展(php代码解析)
安装
1.composer安装
composer create-project laravel/laravel your-project-name --prefer-dist "5.*.*"
- 直接复制一份安装
路由
- 是将信息从源地址传递到目的地的角色*
- 文件位置:app/Http/routs.php或者app/routes/web.php(版本不同位置有差别)
- 基本路由:
Route::get('/',function(){ return 'hello world!' });
Route::post('/insert',function(){});
Route::put(......);
Route::delete('.....');
-
laravel框架中所有的模板文件都是存放在resources/views中,模板文件都是以
.blade.php
结尾 -
在每一个post表单中需要添加隐藏域来完成请求
{{csrf_field()}}
-
加参数的路由
//限制参数的类型
Route::get('/goods/{id}',function($id){
echo ‘商品详情页当前id为’.$id;
})->where('id','\d+');
//多个参数
Route::get('/{type}-{id}',function($type,$id){
echo '当年的类型为'.$type.',当前的id为'.$id;
});
//别名
Route::get('/Admin/User/index',[
'as'=>'ulist',
'uses'=>function(){
echo "这里是后台用户显示";
echo route('ulist'); //route函数是通过路由来快速创建完整url的
}
]);
//路由组
Route::group([],function(){
});
- 404页面设置
abort(404,'没有找到相关页面!');
- 设置模板——>resources/views/errors/404.blade.php
中间件
-
创建(默认不直接生效)
php artisan make:middleware LoginMiddleware
生成的中间件都在 app/Http/Middleware -
编写代码
-
注册
——全局注册
在Kernel.php——>$middleware成员属性中添加
——路由注册
在Kernel.php——>$routeMiddleware成员属性中添加 -
使用
Route::get('/middle',['middleware'=>'test',function(){
return 'hello world!';
}]);
Route::get('/aa',function(){
return "aa";
})->middleware('test');
控制器
app/Http/Controllers
- 创建控制器
php artisan make:controller UserController
php artisan make:controller UserController --plain
(无多余方法的) - 路由以及访问
//当前用户请求服务器上的/controller路径时,会执行UserController控制器文件中的show方法
Route::get('/controller','UserController@show');
//使用别名
Route::get('admin/user/delete/{id}',[
'as'=>'udelete',
'uses'=>'UserController@delete'
]);
Route::get('admin/user/index',[
'middleware'=>'login',
'uses'=> 'UserController@index'
]);
- 隐式控制器
//如果是goods开头的路径,都交给GoodsController处理
Route::controller('goods','GoodsController')
//在GoodsController中添加add方法,前面加请求方式(get/post)
//GET /goods/add HTTP/1.1
public function getAdd(){
}
//插入的请求方式为post
//POST /goods/insert HTTP/1.1
public function postInsert(){}
4.restful控制器
Route::resource('photos', 'PhotoController');
方法 | 路径 | 动作 | 路由名称 |
---|---|---|---|
GET | /photos | index | photos.index |
GET | /photos/create | create | photos.create |
POST | /photos | store | photos.store |
GET | /photos/{photo} | show | photos.show |
GET | /photos/{photo}/edit | edit | photos.edit |
PUT/PATCH | /photos/{photo} | update | photos.update |
DELETE | /photos/{photo} | destroy | photos.destroy |
请求
1.基本信息获取
$request->method(); #获取请求方法
$request->IsMethod('post');#检验方法
$request->path();#请求路径
$request->url();#获取完整url
$request->ip();#获取ip
$request->getPort();#获取端口
- 提取请求参数
$name = $request->input('name'); #基本获取
$request->input('name','Sally'); #设置默认值
$request->has('name'); #检测是否存在
$input = $request->all(); #提取所有参数
$request->only(['username','password']); #提取部分
$request->except(['credit_card']); #提取部分
$request->header('Connection');#获取头信息
- 文件操作
$request->hasFile('photo'); #检测是否有文件上传
$request->file('photo')->move('./uploads/','001.jpg');#将文件移动到指定位置
- cookie操作
\Cookie::queue('name','Jack',10); #设置
return response(' ')->withCookie('uid',10,10); #设置
\Cookie::get('name'); #读取
$request->cookie('name'); #读取
- 闪存信息
$request->flash();#将所有参数写入闪存
$request->flashOnly('title','price');#将部分参数写入闪存
$request->flashExcept('_token');#除去某些参数之外的参数
\Session::flash('name','jack'); #自定义闪存
响应
return '哈哈哈'; #返回字符串
return response('')->withCookie('id',20,60); #设置cookie
return response()->json(['a'=>100,'b'=>2000]);#返回json
return response()->download('web.config');#下载文件
return redirect('/goods/add');#页面跳转
return response()->view('goods.add');#显示模板
return response('')->head('name','helloworld'); #响应头
视图
view('user.add') #解析模板
view('user.edit',['username'=>'admin']);#分配数据到模板
模板引擎blade
resources/views #模板的默认存放位置
{{$username}} #使用变量
{{time()}}#使用函数
{{$username or 'guest'}} #设置默认值
{{!! $name !!}} #显示html代码
@include('header')#引入子视图
模板继承
#占位符
@yield('title')
@section('content')
@show
#新模板内容
@extends('index')
@section('title','new Title')
@section('content')
new contents is here
@endsection
流程控制
@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++){}
@endfor
@foreach($users as $user)
@endforeach
数据库
支持的数据库类型 Mysql ,Postgres, SQLite, SQL Server
数据库连接配置
* 文件位置:`config/database.php`
* 结果集的返回类型 :`'fetch'=>PDO::FETCH_ASSOC`
* .env环境快速配置
数据库的基本操作
```
DB::select #查询
DB::insert #插入
DB::update #更新
DB::delete #删除
DB::statement('drop table users');#一般语句
#事务操作
DB::beginTransaction
DB::rollBack()
DB::commit()
DB::connection('foo')->select(....);#操作多个数据库
```
### 构造器
#### 插入
#单条
DB::table('users')->insert(
['email'=>'xxx@qq.com','votest'=>0]
);
#多条
DB::table('users')->insert([
['email'=>'xxx@qq.com','votest'=>0],
['email'=>'zzz@qq.com','votest'=>0]
] );
#获取id插入
$id = DB::table('users')->insertGetId(
['email'=>'xxx@qq.com','votes'=>0]
);
更新
DB::table('users')->where('id',1)->update(['votes'=>1]);
删除
DB::table('users')->where('votes','<',100)->delete();
查询
DB::table('users')->get() #查询所有
DB::table('users')->first() #查询单条
DB::table('users')->value('username')#查询单条结果中的某个字段
DB::table('users')->lists('username') #获取一列数据
连贯操作
DB::table()->select()->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')->where('votes','>',100)->orWhere('name','John')->get();
DB::table('users')->whereBetween('votes',[1,100])->get();
DB::table('users')->whereIn('id',[1,2,3])->get() ;
计算
DB::table('users')->count() #总数
DB::table('orders')->max('price')#最大值
DB::table('order')->avg('price')#平均值
sql语句记录
Event::listen('illuminate.query',function($query){var_dump($query);});
放入路由文件中
数据库迁移
- 创建类文件
php artisan make:migration test
up 方法
- 创建表
Schema::create('users',function(Blueprint $table){
$table->increments('id')->comment('主键字段');
$table->string('username')->nullable()->default('abc')->comment('用户名');
$table->char('password',100)->comment('密码');
});
- 创建表字段
1.字段类型
```
$table->increments('id'); #主键字段
$table->string('username');#字符串字段
$table->integer('age');#整型
$table->float('weight'); #浮点型
$table->text('intro'); # 文本类型
```
2. 字段修饰
` nullable default unsigned comment `
3. 索引
```
$table->primary('id');#主键
$table->index('password');#一般索引
$table->unique('username');#唯一索引
```
4. 设置引擎
`$table->engine = 'myisam;'`
down方法
Schema::drop('users');#删除表
命令
php artisan migrate
php artisan migrate:refresh
记录表结构的变化
-
检测表是否存在
Schema::hasTable('gg')
-
检测表中的字段是否存在
Schema::hasColumn('gg','pic')
-
增加字段(如果表存在)
·Schema::table('users',function($table){ $table->string('email');})·; -
修改字段
这里需要安装一个包composer require doctrine/dbal
$table->decimal('price',10,2)->change();
-
删除字段
$table->dropColumn('phone'); -
检测 索引
-
删除
$table->dropPrimary
$table->dropUnique
$table->dropIndex
数据库数据填充
套路一
- 创建注入文件(文件默认在database/seed中)
php artisan make:seeder user
- 在文件中填写注入代码
- 运行指令
php artisan db:seed --class=user
套路二
- 创建注入文件
- 在文件中书写注入代码
- 在DatabaseSeeder 文件中添加代码
- 运行指令
php artisan db:seed
设置自定义函数和自定义类文件
//app/library/helper.php
#在项目下的composer.json中添加信息
"autoload":{
"classmap":[
"database"
],
"files":[
"app/Library/helper.php"
]
},
composer dump-auto
调试工具
debugbar安装
composer require barryvdh/laravel-debugbar
#在config/app.php里面的providers添加
Barryvdh\Debugbar\ServiceProvider::class
chrome插件postman
模型操作
创建模型
php artisan make:model Order
php artisan make:model Order -m #会自动添加迁移文件
模型限定
- 模型所对应的默认的表名是在模型后面加s
Order=>orders Goods=>goods - 主键字段 id
- 时间字段 create_at update_at
属性设置
- 设置操作的表名
public $table= 'userinfo';
- 设置默认的时间字段
public $timestamps = false;
- 修改默认的主键名称
public $primaryKey = 'uid'
;
laravel 使用前端框架Bootstrap
yarn install --no-bin-links
yarn add cross-env
-
安装完成之后,让我们对 Laravel 默认生成的 app.scss 文件进行编辑,删除此文件里的所有内容,只留下面一行,导入 Bootstrap:
resources/assets/sass/app.scss@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
-
将 Bootstrap 导入成功之后,我们需要使用以下命令来将 .scss 文件编译为 .css 才能正常使用,编译命令如下:
npm run dev
-
我们也可以通过下面的命令,在每次检测到 .scss 文件发生更改时,自动将其编译为 .css 文件:
$ npm run watch-poll
请保证在进行项目开发时 npm run watch-poll 一直运行着,避免出现前端文件更改后没有应用到页面上的歧义