Laravel框架第3天
一、学习Composer
1、了解Composer
1)什么是Composer
Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
2)理解
- 如果PHP是win操作系统,composer就是杀毒软件的软件管家
- 如果PHP是Linux操作系统,composer就是yum
之前:项目中需要发送邮件、验证码等功能必须自己去网上下载整合到项目中
现在:通过composer命令安装自动整合到项目中
3)总结
Composer是为PHP准备的软件管家,项目所需工具库都可以通过Composer下载
下载Composer
❉ 官网
- 官方网站:https://getcomposer.org (安装下载composer用)
- 中文网站:http://www.phpcomposer.com/ (学习,切换镜像)
- 仓库地址:https://packagist.org/ (存放组件的仓库,需翻墙)
※ 方法1:说明,下载并安装(不推荐)
- 下载composer-setup.exe文件安装
- 好处:傻瓜式、安装简单
- 坏处:容易报错、仅win操作系统使用
步骤1:下载
步骤2:双击
步骤3:安装(注:除下图选择php.exe其余直接下一步next):
步骤4:检查是否安装成功(在DOS窗口输入 composer出现下图字样则安装成功)
※ 方法2:说明,下载并安装(推荐使用)
- 下载composer.phar文件安装
- 好处:跨平台
- 坏处:渣渣上手难
步骤1:下载(打开网页,拖拽到底部)
步骤2:该文件免安装所以可以直接使用
步骤2:检查是否安装成功(在DOS窗口输入 composer出现下图字样则安装成功)
语法
http://docs.phpcomposer.com/03-cli.html
composer install #第一次从远处仓库拉去php包的时候执行
composer update #修改本地的composer.json后执行(安装,更新)
composer require #包含/下载一个php包到vendor目录中
composer init #创建一个composer.json文件(不推荐,自己手动创建即可)
composer about #查看composer的信息
composer self-update #composer自己更新
composer list #查看帮助
︴简化Composer命令
- 复杂:php composer.phar 指令
- 简化:composer 指令
说明:后期大量使用composer命令,语法:【php composer.phar 指令】
发现:每次重复敲【php composer.phar】太长
解决:
步骤1:将composer.phar放到www目录中
步骤2:打开DOS窗口输入DOS命令echo @php “%~dp0composer.phar” %*>composer.bat(注:执行命令后会自动创建.bat文件)
步骤3:将composer.bat将去环境变量
步骤4:验证
4、Composer下载软件包流程
二、数据迁移
1、概念
数据迁移就是使用PHP管理数据库
传统数据管理和数据迁移区别
语法
︴手册
http://laravelacademy.org/post/6964.html
调用方法声明创建字段
- php artisan make:migration 数据迁移名称
- php artisan make:migration create_表名_table –create=表名 (创建表)
- php artisan make:migration update_表名_table –table=表名 (修改表)
问:三个语法区别
答:相对而言语法2语法3比语法1多了一些数据,便于创建和修改表
2)运行/撤销迁移
- 运行:php artisan migrate
- 撤销:php artisan migrate:rollback
︴初体验(创建表、修改表)
- 需求:创建表a(字段:id,uname)
步骤1:创建数据迁移文件(也就是创建一个php文件 管理生成a表)
public function up()
{
Schema::create(‘a’, function (Blueprint $table) {
$table->increments(‘id’);
$table->string(‘name’, 30);
});
}
- 需求:修改表a(name改成varchar类型长度为1、增加一个创建于created_at字段)
public function up()
{
Schema::table(‘a’, function (Blueprint $table) {
//改已存在的字段类型
$table->string(‘name’, 4)->change();
//新增
$table->integer(‘created_at’);
});
}
︴练习1:通过数据迁移创建下属表
1)原声SQL
create table day3_t2 (
id int primary key auto_increment comment ‘编号’,
uname varchar(30) not null comment ‘用户名’,
pwd char(32) not null comment ‘密码’,
content text not null comment ‘内容’,
created_at int not null default 0 comment ‘创建于’,
updated_at int not null default 0 comment ‘更新于’
)engine=myisam charset=utf8;
数据迁移
步骤1:创建迁移文件(php artisan make:migration create_day3_t2_table –create=day3_t2)
步骤2:编写迁移代码
public function up()
{
Schema::create(‘day3_t2’, function (Blueprint $table) {
// create table day3_t2 (
// id int primary key auto_increment comment ‘编号’,
// uname varchar(30) not null comment ‘用户名’,
// pwd char(32) not null comment ‘密码’,
// content text not null comment ‘内容’,
// created_at int not null default 0 comment ‘创建于’,
// updated_at int not null default 0 comment ‘更新于’
// )engine=myisam charset=utf8;
//编码已数据库配置文件为主
$table->engine = ‘myisam’;
$table->increments(‘id’)->comment(‘编号’);
$table->string(‘uname’, 30)->comment(‘用户名’);
$table->char(‘pwd’, 32)->comment(‘密码’);
$table->text(‘content’)->comment(‘内容’);
$table->unsignedInteger(‘created_at’)->default(0)->comment(‘创建于’);
$table->unsignedInteger(‘updated_at’)->default(0)->comment(‘更新于’);
});
}
︴练习2:通过SQL语句修复线上BUG
1)原声SQL
#首先插入一条数据,然后test改为test2
insert into day3_t2
values
(null,’test’,’adfadsf’,’dfads’,0,0);
2)数据迁移
#创建数据迁移文件,文件名规则:fix_bug_BUG版本号
#将用户名改成test2
public function up()
{
DB::table(‘day3_t2’)->where(‘uname’, ‘test’)->update([
‘uname’=>’test2’
]);
}
三、填充数据(seeder)
1、概念
- 数据迁移:就是使用php管理数据库
- 填充数据:就是使用php快速插入测试数据
2、语法(seeder)
创建填充器:php artisan make:seeder 填充器名称 (推荐:表名TableSeeder 大驼峰)
运行填充器:php artisan db:seed –class=填充器名称
︴练习1:给day3_t2插入两百条数据
准备文件
php artisan make:seeder Day3t2TableSeeder
执行
︴练习2:faker使用
1)概念
- 说明:faker就是PHP的一个库(类)
- 作用:生成假数据,如手机号、地址、姓名等
- 地址:https://packagist.org/packages/fzaninotto/faker
- 地址:https://github.com/fzaninotto/Faker#fakerproviderimage
使用
步骤1:下载(composer require fzaninotto/faker)
步骤2:使用
Route::get(‘/test’, function() {
$faker = \Faker\Factory::create(‘zh_CN’);
echo $faker->name . ‘<br />’;
echo $faker->email . ‘<br />’;
echo $faker->phoneNumber . ‘<hr />’;
echo $faker->company . ‘<br />’;
echo $faker->city . ‘<br />’;
echo $faker->unixTime . ‘<hr />’;
echo $faker->imageUrl() . ‘<br />’;
echo $faker->imageUrl(50,50) . ‘<hr />’;
echo $faker->paragraph(20) . ‘<br />’;
});
整合数据填充
public function run()
{
for ($i = 0; $i < 100; $i++) {
$faker = \Faker\Factory::create(‘zh_CN’);
$insertData[] = [
‘uname’ => $faker->name,
‘pwd’ => $faker->password,
‘content’ => $faker->paragraph(20)
];
}
DB::table(‘day3_t2’)->insert($insertData);
}
小总结
什么是数据迁移:就是用PHP文件管理数据库
语法:
1) php artisan make:migration 迁移文件名称
2) php artisan make:migration create_表名_table –create=表名
3) php artisan make:migration update_表名_table –table=表名
运行迁移文件:php artisan migrate
撤销迁移文件:php artisan migrate:rollback
什么是数据填充:就是用PHP插入测试数据
什么是faker:就是PHP一个类,这个类生成假数据
数据填充: php artisan make:seeder 填充器名称/文件名 (注:推荐表名TableSeeder 大驼峰)
执行填充: php artisan db:seed –class=填充器名/文件名
四、学生管理小项目(登录模块)
1、准备
1)根据效果图(静态模板)设计表
create database laravel54;
use laravel54;
create table student(
id int primary key auto_increment comment ‘编号’,
uname varchar(45) not null comment ‘用户名’,
pwd varchar(255) not null comment ‘密码’,
age tinyint(3) not null default 0 comment ‘年龄’,
sex tinyint(1) not null default 1 comment ‘性别:1-男,2-女’,
created_at int not null default 0 comment ‘创建于’,
updated_at int not null default 0 comment ‘更新于’
)engine=myisam charset=utf8;
Laravel存储用户密码非MD5算法,而是使用php5.5新函数password_hash和password_verify
加密语法:Hash::make(‘admin888’); 或者 bcrypt(‘admin888’);
校验语法:Hash::check(‘admin888’, 密文);
2)通过PHP创建表并填充数据(数据迁移和填充数据)
- 数据迁移
public function up()
{
// create table student(
// id int primary key auto_increment comment ‘编号’,
// uname varchar(45) not null comment ‘用户名’,
// pwd varchar(255) not null comment ‘密码’,
// age tinyint(3) not null default 0 comment ‘年龄’,
// sex tinyint(1) not null default 1 comment ‘性别:1-男,2-女’,
// created_at int not null default 0 comment ‘创建于’,
// updated_at int not null default 0 comment ‘更新于’
// )engine=myisam charset=utf8;
Schema::create(‘student’, function (Blueprint $table) {
$table->increments(‘id’)->comment(‘编号’);
$table->string(‘uname’, 45)->comment(‘用户名’);
$table->string(‘pwd’, 255)->comment(‘密码’);
$table->unsignedTinyInteger(‘age’)->default(0)->comment(‘年龄’);
$table->unsignedTinyInteger(‘sex’)->default(1)->comment(‘性别:1-男,2-女’);
$table->integer(‘created_at’)->default(0)->comment(‘创建于’);
$table->integer(‘updated_at’)->default(0)->comment(‘更新于’);
});
}
- 创建模型
<?php
namespace App\Http\Model;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
/**
* 设置表名
* @var string
*/
protected $table = ‘student’;
/**
* 声明可以批量设置的属性
* @var array
*/
protected $fillable = [‘uname’, ‘pwd’, ‘age’, ‘sex’];
/**
* Unix时间戳填充数据(注:默认托管创建于更新于)
* @var string
*/
protected $dateFormat = ‘U’;
}
- 填充数据
说明:tinker是Laravel自带的便于调试数据库的工具
运行:php artisan tinker
指令:通过模型操作数据库
调用工厂文件:factory(App\Http\Model\AModel::class, 2)->create()
脚下留心:工厂文件中定义的模型必须通过migration创建无法将无法找到模型
登录模块【加载视图】
1)思路
- 步骤1:定义路由 (/student/login 对应控制器 Student\LoginController@login)
- 步骤2:创建控制器并加载视图
- 步骤3:创建视图
代码
- 步骤1:定义路由 (/student/login 对应控制器 Student\LoginController@login)
- 步骤2:创建控制器并加载视图
- 步骤3:创建视图
登录模块【登录数据处理】
1)思路
- 步骤1:修改登录视图form参数
- 步骤2:修改路由支持post提交(注:cstf 和 弹框资源处理)
- 步骤3:控制器方法增加判断,是否POST提交(是-添加数据,否-加载视图)
代码
- 步骤1:修改登录视图form参数(注:cstf 和 弹框资源处理)
弹框资源
<link href=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css” rel=”stylesheet”>
<script src=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert-dev.js”></script>
<script type=”text/javascript”>
@if (Session::has(‘tips’))
swal(“{{ Session::get(‘tips’) }}!”, “操作提示!”,”{{ Session::get(‘state’) }}”)
@endif
</script>
- 步骤2:修改路由支持post提交
- 步骤3:控制器方法增加判断,是否POST提交(是-判断数据,否-加载视图)
public function login(Request $request)
{
//1.判断是否提交
if ($request->isMethod(‘post’)) {
//2.接受数据
$postData = $request->all();
//3.根据用户名查询用户信息
$student = Student::where(‘uname’, $postData[‘uname’])->first();
//4.判断状态
if (!$student || !Hash::check($postData[‘pwd’], $student->pwd)) {
return redirect(‘/student/login’)->with([‘state’=>’error’, ‘tips’=>’账号或密码错误’]);
}
//5.登录成功去首页
return redirect(‘/student’)->with([‘state’=>’success’, ‘tips’=>’老铁,登录成功’]);
} else {
return view(‘student.login.login’);
}
}
五、学生管理小项目(学生列表)
1、学生列表
1)思路
- 步骤1:定义路由 (/student 对应控制器 Student\IndexController@index)
- 步骤2:创建控制器、查询所有数据、加载视图
- 步骤3:创建视图
- 步骤4:视图循环显示数据
2)代码
- 步骤1:定义路由 (/student 对应控制器 Student\IndexController@index)
- 步骤2:创建学生控制器、查询所有数据、加载视图
- 步骤3:创建视图
- 步骤4:视图循环显示数据
分页
弹框
<link href=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css” rel=”stylesheet”>
<script src=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert-dev.js”></script>
<script type=”text/javascript”>
@if (Session::has(‘tips’))
swal(“{{ Session::get(‘tips’) }}!”, “操作提示!”,”{{ Session::get(‘state’) }}”)
@endif
</script>
2、学生添加【加载视图】
1)思路
- 步骤1:定义路由 (/student/add 对应控制器 Student\IndexController@add)
- 步骤2:创建控制器方法、加载视图
- 步骤3:创建视图
代码
- 步骤1:定义路由 (/student/add 对应控制器 Student\IndexController@add)
- 步骤2:创建控制器方法、加载视图
- 步骤3:创建视图并修改表单action等属性
表单属性和cstf隐藏域
3、学生添加【数据处理】
1)思路
- 步骤1:更改路由支持post提交
- 步骤2:控制器接受数据、插入数据库、判断(成功-列表页,失败-当前页)
代码
- 步骤1:更改路由支持post提交
- 步骤2:控制器接受数据、插入数据库、判断(成功-列表页,失败-当前页)
<?php
namespace App\Http\Controllers\Student;
use App\Http\Model\Student;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
//添加
public function add(Request $request)
{
//1.判断
if ($request->isMethod(‘post’)) {
//2.接受数据
$postData = $request->all();
unset($postData[‘_token’]);
$postData[‘pwd’] = bcrypt($postData[‘pwd’]);
//3.插入数据
$rs = Student::create($postData);//脚下留心:cstf有隐藏域_token 模型自动托管创建于和更新于
//4.判断
if ($rs) {
return redirect(‘/student’)->with([‘state’=>’success’, ‘tips’=>’插入成功’]);
} else {
return redirect(‘/student/add’)->with([‘state’=>’error’, ‘tips’=>’插入失败’]);
}
} else {
//直接加载视图
return view(‘student.index.add’);
}
}
//列表
public function index()
{
//1.分页查询数据
$student = Student::orderBy(‘id’, ‘desc’)->paginate(2);
//2.加载视图并传递数据
return view(‘student.index.index’, compact(‘student’));
}
}