Press "Enter" to skip to content

Laravel5.4快速开发简书网站

课程介绍

路由,控制器,模型,表单验证,blade模板,文件存储,分页,数据库迁移,数据填充,容器,服务提供者,门脸类,
用户认证,用户授权,Scount全文搜索,Elasticsearch搜索引擎,模型关联,Artisan命令,adminlte的后台模板,jquqery,bootstrap,队列

Laravel5.4介绍

  • Laravel的特性
    优雅,简洁,工程化

laravel的历史版本

5.1是长期维护版本

Laravel的社区生态

官网,中文社区,文档,源码地址

Laravel的优势

  • 功能丰富
    队列,搜索,数据库迁移,定时脚本
  • 丰富的第三方包
    composer管理:faker[数据填充包]
  • 思想先进
    服务容器,服务提供者,缓存服务
  • 社区丰富
    国际化,基于Laravel的开源项目多,开源

Laravel5.4安装

  • 环境要求
    5.6.4,PHP扩展,Mysql

开发工具

phpstorm或vscode

composer安装

composer create-project laravel/laravel laravel55 “5.5.*”

启动Laravel

Nginx,apache php artisan serve

Laravel目录介绍

逻辑代码app 配置文件config 数据库管理database 对外资源public

配置文件

.env文件中配置
php artisan migrate:install 测试是否安装成功

项目相关模块介绍

先完成重点模块,再完成其他模块

文章模块章节说明

路由,表设计,增删改查

Laravel路由的几种形式

控制器一定要写绝对路径

HTTP方法 get post match put {{ mnethod_field("PUT") }}

路由参数 post/{id}

路由分组 Route::group(['prefix' => 'posts'])

绑定模型 /posts/{post} 直接绑定模型

文章模块的页面渲染

创建路由以及文章列表,文章详情,文章创建,文章保存,文章编辑,文章更新,文章删除

view 显示视图模板

Laravel的blade模板

参数绑定 {{$title}}
ifelse判断 @if @endif
for循环 @foreach @endforeach
参数传递 compact

Laravel语法优化文章模板页面

使用yield extends 使用section进行填充 include

使用migration创建posts数据表

表结构 id,title,content,user_id,created_at,updated_at

php artisan make:migrtion create_posts_table

修改字符过长的问题
在AppServiceProvider中增加Schema类,在boot方法中增加Schema::defaultStringLength(191)

ORM创建文章模块模型

创建post模型 php artisan tinker可以方便测试

文章列表页的逻辑实现

模型查找 orderBy get
页面渲染 foreach endforeach
时间转换 toFormattedDateString()
数据填充 使用Faker sentence指定单词数量 paragraph指定句子 使用tinker factory(类,数量)->create()
分页 paginate links分页
字符截取 str_limit

文章详情页的逻辑实现

直接使用模型绑定即可

csrf+富文本编辑器创建文章

需要添加csrf_token {{csrf_field()}}
request() 获取参数 可以获取数组
create静态方法进行添加,需要在模型中设置可以插入的值
$guarded,$fillable;
可以使用继承基类的方式解决

$this->validate(request(),[

])
需要下载中文包
增加错误提示 alert alert-danger role='alert'
判断count foreach errors->all
{!!  !!} 不转义内容
使用$request->file->storePublicly保存图片并返回地址

文章编辑的逻辑实现

{{method_filed("PUT")}}
{{csrf_filed()}}
使用模型绑定即可

文章删除

使用模型绑定即可,需要用户权限校验

Laravel核心思想之服务容器

服务容器:存放类的,用的时候取出
IOC控制反转:一种面向对象编程的思想,可以解决代码耦合度高的问题
依赖注入:将类通过参数的形式注入到方法中

Laravel的核心思想之服务提供者

register和boot具有顺序的区别,延迟服务提供是一个参数默认开启

Laravel的核心思想之门脸模式

静态调用,aliases
门脸类可以直接使用不需要引入过多的命名空间如:\Request

分析Laravel核心日志类

直接使用门脸类\Log

如何查找一个门脸或注入类有哪些函数

找到门脸方法,使用tinker app('Psr\Log\LoggerInterface')

用户注册登录模块

登录页面,注册页面,个人设置
注册,登录,认证权限,头像设置

使用路由和模板搭建登录注册页面

前台的auth组件不利于后期修改,可能要修改laravel源码,只使用auth管理类

register login logout /user/me/setting

创建视图

用户注册逻辑

unique:user,name 验证传入的名称是否唯一
confirmed 验证密码是否一致
bcrypt 进行密码加密
引入错误提示

Auth门脸类的讲解及配置流程

Auth::attempt 验证用户名及密码并记住用户
Auth::logout 退出当前用户
Auth::user 获取当前已通过认证的用户
Auth::id 获取已通过认证的用户的id

需要继承Authenticatable类
use Illuminate\Foundation\Auth\User as Authenticatable;
配置$fillable;

使用Auth实现用户登录逻辑

引入错误提示
使用Auth::attempt门脸类进行验证
使用Redirect::back进行返回

用户授权Policy

定义策略类
注册策略类和模型关联
策略判断
$this->authorize @can $this->can三种方法

使用Policy实现文章权限控制

先把用户id存入
展示用户名称 \Auth::user()->name
展示文章的用户 使用关联
创建Policy php artisan make:policy PostPolicy

评论模块章节

表设计,路由,模型关联建立

migration创建评论表

post_id user_id content

关联模型建立

一对一,一对多,多对多,反向一对多,远程一对多,多态多对多

创建评论模型

hasMany belongsTo

使用路由和模板搭建评论页面

写一个post路由

添加评论业务逻辑的实现

校验,保存数据

使用模型和模型关联实现评论列表页

保存数据直接使用post->codmments即可保存文章id

模型关联计数

withCount 查找关联表中的数量

赞模型块介绍

表设计,模型,赞按钮,文章赞总数

创建赞数据表

id,post_id,user_id 增加模型

使用模型实现赞页面的逻辑的实现

firstOrCreate

zan关联文章及用户

zans获取全部赞

扩展withCount实现点赞数和评论数

withCount 展示位置填写$post->comments_count

搜索模块

ES搜索引擎

搜索模块的设计

搜索功能的分析
Elasticsearch选取
Elasticsearch介绍
Elasticsearch中文支持

Elasticsearch基本概念

索引index,类型type,文档document,字段field,模板template

梳理实现搜索模块的具体步骤

安装elasticsearch和ik插件

Elasticsearch的laravel scout包安装

创建ylaravel的索引和模板

导入数据库已有的数据

搜索页面和逻辑展示

elasticsearch安装

https://github.com/medcl/elasticsearch-rtf

测试安装

运行
cd elasticsearch/bin
elasticsearch.bat

安装laravel使用elastic的包

安装laravel/scout
composer require laravel/scout
安装scout的es驱动
composer require tamayo/laravel-scout-elastic
修改scout.php

Laravel自定义命令行建立搜索引擎和模板的建立

创建Command 编辑handle 挂载

php artisan make:command ESInit

此处需要确保elastic已经运行

关联模型并使用scout命令导入数据

use Searchable
定义需要搜索的字段 toSearchableArray
导入数据 php artisan scout:import "\App\Post"
访问9200查看数据是否存在

使用路由和模板搭建搜索结果页

加入路由,注意路由的先后顺序

个人中心模块介绍

表设计,页面搭建,业务逻辑

使用migration创建数据表好人模型

fan_id,star_id

实现多对多模型关联

fuser,suser 关联用户
posts 关联文章
fans 关联粉丝
stars 关注用户
doFan 关注某人
hasFan  是否被关注

使用路由和模板搭建个人中心页面

页面实现
    用户信息展示月面
路由
    关注,取消关注

使用多对多模型实现个人中心逻辑

- 获取用户的关注,粉丝,文章数
- 取出前十条文章
- 关注用户的关注,粉丝,文章数
- 粉丝用户的关注,粉丝,文章数
- 取消关注和关注

使用migration创建专题数据表和模型

多对多关联,需要创建两张表

使用路由和模板搭建专题页面

专题详情页 投稿

使用viewcomposer实现公共区域的专题列表

使用该方法可以将变量转为公共

介绍Laravel中的scope

显示专题下的文章
对投稿的文章进行限制,不能是别人的文章,不能是已经投稿的文章

写法 scopeActive

scope实现某个用户未投稿的文章

无关联结果查询

周边模型关联

获取文章数量以及文章列表

使用scope等完成专题详情页逻辑

专题本身,专题的文章,可以投稿的文章

后台代码目录设计

App/Admin/Controllers

创建另外一个路由文件

前后台的模板区分

创建admin目录在resource文件夹下,增加视图文件,由于Model涉及一些公共的所以不作区分

嵌入adminlte

composer require "almasaeed2010/adminlet=~2.0"

搭建后台登录页面

路由,页面

提取公共部分

header siderbar main

后台表前缀和模型约定

表前缀为admin

使用Auth和guard搭建管理后台管理

middleware

管理人员模块

用于增加管理人员

管理人员列表和增加页面

路由,页面

文章审核模块

涉及到前台的修改和后台的文章列表以及JS

文章审核的需求分析

文章状态 0未知 1审核通过 2审核未通过

进行文章的软删除

使用模型中的scope过滤掉状态为-1的文章

完成文章审核模块页面

管理文章列表页面

    withoutGlobalScope 取消全局scope

文章软删除操作
    千万别忘token
JS

分析用户角色权限模型

角色和用户和权限是多对多关系

创建表和模型

角色表,角色权限表,权限表,用户角色表

角色表:名称,描述
权限表:名称,描述
权限角色表:角色ID,权限ID
用户角色表:用户ID,角色ID

使用hasMany搭建模型关系

用户有哪些角色
用户是否有某个角色
intersect
用户是否有某个权限
需要判断当前的用户的角色是否具有某个权限
$this>isInRoles($permission->roles)
给用户分配角色
删除用户的某个角色
当前角色的所有权限
给角色授予权限
取消角色的权限
角色是否有权限
contains
权限属于哪个角色

搭建路由和页面模板

路由,权限管理页面,角色管理页面

逻辑实现-用户

用户角色管理列表 使用contains判断用户是否具有某个角色

findmany diff

逻辑实现-角色

列表创建逻辑实现

角色权限列表,创建

使用Laravel的Gate实现权限管理

在AuthServiceProvider中加入代码,此处非常重要

在路由中增加中间件校验

专题管理模块

实现增删改查即可 可以使用resource更方便

页面渲染

通知模块

后台发送通知,前台接收

具体需求设计和分析

异步发送通知到每个用户,需要两张表:通知表,通知用户表

数据库设计

notice,user_notice

页面搭建

index,create,store

前台页面逻辑

Auth::user() $notices = $user->notices;

Laravel的队列

可以使用多种驱动,定义任务,分发任务,启动队列

修改驱动为database

创建database的queue表
php artisan queue:table

创建任务SendMessage
php artisan make:job SendMessage
创建发送逻辑dispatch
在SendMessage增加逻辑,使用dispatch触发逻辑
启动队列
php artisan queue:work
设为常驻内存
nohup php artisan queue:work >> /dev/null &

使用加载进行优化

尽量避免在视图中进行查询,使用load预加载进行优化