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

分享 Summer ⋅ 于 2个月前 ⋅ 最后回复由 Vincentliu 1个月前 ⋅ 4847 阅读

项目概述

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

:book: Laravel 书籍:

本帖已被设为精华帖!
本帖由系统于 2个月前 自动加精
回复数量: 27
  • xhh110 因为爱,所以想走的更远 --- love for coding
    2个月前

    👏 呱唧呱唧

  • fationyyk
    2个月前

    有没有赠书之类的活动啊

  • 曹鹏飞
    2个月前

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

  • LavaJin Web Developer
    2个月前

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

  • ahkxhyl
    2个月前

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

  • 卢创 闷骚程序员
    2个月前

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

  • 我是Miami
    2个月前

    好像没有搜索功能。

  • raykwok
    2个月前

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

  • ahkxhyl
    2个月前

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

    file

  • Summer MOD A Life-long learner.
    2个月前

    @ahkxhyl fixed

  • dodo
    2个月前

    Windows + Homestead 已跑起来:metal:

  • ab0029
    2个月前

    :six::six::six:

  • wansui
    2个月前

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

  • YEARNFF
    2个月前

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

  • YEARNFF
    2个月前

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

  • ADKi 大鹏一日同风起,抟摇直上九万里。 假令风歇时下来,犹能簸却沧溟水。
    2个月前

    这个和 phphub 有多大区别呢

  • jobsssss
    1个月前

    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
  • jobsssss
    1个月前

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

  • rlyabc
    1个月前

    php artisan migrate

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

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

  • reallyli 莫等闲、
    1个月前

    赞 :+1:

  • ChenPHPER
    1个月前

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

  • ChenPHPER
    1个月前

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

  • sthwrong
    1个月前

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

  • ChenPHPER
    1个月前

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

  • ChenPHPER
    1个月前

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

  • Vincentliu
    1个月前

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

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