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

项目概述

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 通知作者话题有新回复 话题被评论以后

Practice makes perfect.

本帖已被设为精华帖!
本帖由系统于 11个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 29

? 呱唧呱唧

11个月前

有没有赠书之类的活动啊

11个月前

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

11个月前

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

11个月前
ahkxhyl

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

11个月前

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

11个月前

好像没有搜索功能。

11个月前

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

11个月前
ahkxhyl

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

file

11个月前
Summer

@ahkxhyl fixed

11个月前

Windows + Homestead 已跑起来:metal:

11个月前

:six::six::six:

11个月前

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

11个月前

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".

11个月前

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

11个月前
ADKi

这个和 phphub 有多大区别呢

10个月前

npm run dev 报错

> cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js

'cross-env' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ development: `cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ development script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\25047\AppData\Roaming\npm-cache\_logs\2017-12-02T12_47_05_489Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ dev: `npm run development`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\25047\AppData\Roaming\npm-cache\_logs\2017-12-02T12_47_05_562Z-debug.log
10个月前

各位,npm run dev失败是因为没有运行npm install命令安装node_module。
上一次安装项目还是6个月前了,忘了。

10个月前

php artisan migrate

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

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

10个月前
reallyli

赞 :+1:

10个月前

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

10个月前

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

10个月前

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

10个月前

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

10个月前

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

10个月前

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

9个月前

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

file

4个月前

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

4个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!