开源项目 —— LaraBBS ,一个简洁优雅的论坛应用

项目概述

LaraBBS 是一个简洁的论坛应用,使用 Laravel5.5 编写而成。一步步开发此项目的教程请见 《Web 开发实战进阶 - 从零开始构建论坛系统》

功能如下

  • 用户认证 —— 注册、登录、退出;
  • 个人中心 —— 用户个人中心,编辑资料;
  • 用户授权 —— 作者才能删除自己的内容;
  • 上传图片 —— 修改头像和编辑话题时候上传图片;
  • 表单验证 —— 使用表单验证类;
  • 文章发布时自动 Slug 翻译,支持使用队列方式以提高响应;
  • 站点『活跃用户』计算,一小时计算一次;
  • 多角色权限管理 —— 允许站长,管理员权限的存在;
  • 后台管理 —— 后台数据模型管理;
  • 邮件通知 —— 发送新回复邮件通知,队列发送邮件;
  • 站内通知 —— 话题有新回复;
  • 自定义 Artisan 命令行 —— 自定义活跃用户计算命令;
  • 自定义 Trait —— 活跃用户的业务逻辑实现;
  • 自定义中间件 —— 记录用户的最后登录时间;
  • XSS 安全防御;

运行环境要求

  • Nginx 1.8+
  • PHP 7.1+
  • Mysql 5.7+
  • Redis 3.0+
  • Memcached 1.4+

开发环境部署/安装

本项目代码使用 PHP 框架 Laravel 5.5 开发,本地开发环境使用 Laravel Homestead

下文将在假定读者已经安装好了 Homestead 的情况下进行说明。如果您还未安装 Homestead,可以参照 Homestead 安装与设置 进行安装配置。

基础安装

1. 克隆源代码

克隆 larabbs 源代码到本地:

> git clone git@github.com:summerblue/larabbs.git

2. 配置本地的 Homestead 环境

1). 运行以下命令编辑 Homestead.yaml 文件:

homestead edit

2). 加入对应修改,如下所示:

folders:
    - map: ~/my-path/larabbs/ # 你本地的项目目录地址
      to: /home/vagrant/larabbs

sites:
    - map: larabbs.app
      to: /home/vagrant/larabbs/public

databases:
    - larabbs

3). 应用修改

修改完成后保存,然后执行以下命令应用配置信息修改:

homestead provision

随后请运行 homestead reload 进行重启。

3. 安装扩展包依赖

composer install

4. 生成配置文件

cp .env.example .env

你可以根据情况修改 .env 文件里的内容,如数据库连接、缓存、邮件设置等。

5. 生成秘钥

php artisan key:generate

6. 生成数据表及生成测试数据

在 Homestead 的网站根目录下运行以下命令

$ php artisan migrate --seed

初始的用户角色权限已使用数据迁移生成。

7. 配置 hosts 文件

echo "192.168.10.10   phphub.app" | sudo tee -a /etc/hosts

前端框架安装

1). 安装 node.js

直接去官网 https://nodejs.org/en/ 下载安装最新版本。

2). 安装 Yarn

请按照最新版本的 Yarn —— http://yarnpkg.cn/zh-Hans/docs/install

3). 安装 Laravel Mix

yarn install

4). 编译前端内容

// 运行所有 Mix 任务...
npm run dev

// 运行所有 Mix 任务并缩小输出..
npm run production

5). 监控修改并自动编译

npm run watch

// 在某些环境中,当文件更改时,Webpack 不会更新。如果系统出现这种情况,请考虑使用 watch-poll 命令:

npm run watch-poll

链接入口

管理员账号密码如下:

username: summer@yousails.com
password: password

至此, 安装完成 ^_^。

扩展包使用情况

扩展包 一句话描述 本项目应用场景
Intervention/image 图片处理功能库 用于图片裁切
guzzlehttp/guzzle HTTP 请求套件 请求百度翻译 API
predis/predis Redis 官方首推的 PHP 客户端开发包 缓存驱动 Redis 基础扩展包
barryvdh/laravel-debugbar 页面调试工具栏 (对 phpdebugbar 的封装) 开发环境中的 DEBUG
spatie/laravel-permission 角色权限管理 角色和权限控制
mewebstudio/Purifier 用户提交的 Html 白名单过滤 帖子内容的 Html 安全过滤,防止 XSS 攻击
hieu-le/active 选中状态 顶部导航栏选中状态
summerblue/administrator 管理后台 模型管理后台、配置信息管理后台
viacreative/sudo-su 用户切换 开发环境中快速切换登录账号
laravel/horizon 队列监控 队列监控命令与页面控制台 /horizon

自定义 Artisan 命令

命令行名字 说明 Cron 代码调用
larabbs:calculate-active-user 生成活跃用户 一小时运行一次
larabbs:sync-user-actived-at 从 Redis 中同步最后登录时间到数据库中 每天早上 0 点准时

队列清单

名称 说明 调用时机
TranslateSlug.php 将话题标题翻译为 Slug TopicObserver 事件 saved()
TopicReplied.php 通知作者话题有新回复 话题被评论以后
摈弃世俗浮躁,追求技术精湛
本帖已被设为精华帖!
本帖由系统于 6年前 自动加精
Summer
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 32
幽弥狂

? 呱唧呱唧

6年前 评论

有没有赠书之类的活动啊

6年前 评论

666,两本图书忠实读者,醍醐灌顶,2本全书没半句多余的话,纯粹经验实战之谈,79元少走两年弯路,超值稳赚。迫切期望作者抓紧更新下一本,做梦都在等。

6年前 评论

麻烦Summer 看下给你的私信 谢谢 :)

6年前 评论

php7.0下提示有些依赖包安装需要PHP7.1支持~

6年前 评论

这么用心的学习教程,业界良心啊

6年前 评论

好像没有搜索功能。

6年前 评论

貌似没有祖国开设论坛所需的实名认证功能 :bowtie:

6年前 评论

有个问题~前台没有登录的话 直接访问后台报错

file

6年前 评论
Summer

@ahkxhyl fixed

6年前 评论

Windows + Homestead 已跑起来:metal:

6年前 评论

:six::six::six:

6年前 评论

@waney 在homestead上,windows php不支持pcntl这个扩展

6年前 评论

yarn 安装失败 错误提示:error An unexpected error occurred: "EPROTO: protocol error, symlink '../acorn/bin/acorn' -> '
/home/vagrant/larabbs/node_modules/acorn-dynamic-import/node_modules/.bin/acorn'".
info If you think this is a bug, please open a bug report with the information provided in "/h
ome/vagrant/larabbs/yarn-error.log".

6年前 评论

npm run dev 运行不起来怎么回事呀

6年前 评论
DukeAnn

这个和 phphub 有多大区别呢

6年前 评论

php artisan migrate

[Symfony\Component\Debug\Exception\FatalErrorException]
Cannot use Illuminate\Database\Eloquent\Model as Model because the name is already in use

这个有知道什么原因的吗?

6年前 评论

赞 :+1:

6年前 评论

file
有人知道这个什么问题吗?

6年前 评论

@ahkxhyl 可以帮我看下我的问题吗

6年前 评论

@ChenPHPER 论坛已经有类似问题的答案.总而言之就是新版php对count()的要求更严格,必须是数组或者实现了countable的才能调用.

6年前 评论

@sthwrong 有没有具体链接看看啦

6年前 评论

@sthwrong 我是直接用isset方法解决的

6年前 评论

@Summer summerblue/administrator项目需要维护了,在PHP7.2情况下,多处使用sizeof()函数报错。要实现countable或者改用其他函数。。

6年前 评论

請問 redis 有些問題
redis 已經安裝了
是用 composer require predis/predis 安裝了
可是就是不行,如圖,有誰知道如何做?

file

5年前 评论

將 use Redis
改成
use Illuminate\Support\Facades\Redis
解決

5年前 评论

安装composer依赖时的结果是:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

Problem 1

  • Installation request for laravel/horizon v1.4.3 -> satisfiable by laravel/ horizon[v1.4.3].
  • laravel/horizon v1.4.3 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.

    To enable extensions, verify that they are enabled in your .ini files:

  • D:\myphp_www\PHPTutorial\php\php-7.2.1-nts\php.ini
    You can also run php --ini inside terminal to see which files are used by PH P in CLI mode.

怎么解决???

4年前 评论
Summer
$ composer install --ignore-platform-reqs

@SanHuo

4年前 评论

@Summer
哦。不过我的解决方法是:进入虚拟机里的项目所在文件夹进行安装相关依赖。 :joy:

4年前 评论

Illuminate\Contracts\Container\BindingResolutionException
Target class [itemconfig] does not exist.
请问报这个错误该怎么处理呢?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!