开源项目 —— LaraBBS ,一个简洁优雅的论坛应用
项目概述
- 产品名称:LaraBBS
- 项目代号:larabbs
- 项目地址:https://github.com/summerblue/larabbs
- 官方地址:分享:Laravel 教程系列书第二本《Web 开发实战进阶 - 从零开始构建论坛系...
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
链接入口
- 首页地址:http://larabbs.app/
- 管理后台:http://larabbs.app/admin
管理员账号密码如下:
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 | 通知作者话题有新回复 | 话题被评论以后 |
? 呱唧呱唧
有没有赠书之类的活动啊
666,两本图书忠实读者,醍醐灌顶,2本全书没半句多余的话,纯粹经验实战之谈,79元少走两年弯路,超值稳赚。迫切期望作者抓紧更新下一本,做梦都在等。
麻烦Summer 看下给你的私信 谢谢 :)
php7.0下提示有些依赖包安装需要PHP7.1支持~
这么用心的学习教程,业界良心啊
好像没有搜索功能。
貌似没有祖国开设论坛所需的实名认证功能 :bowtie:
有个问题~前台没有登录的话 直接访问后台报错
@ahkxhyl fixed
Windows + Homestead 已跑起来:metal:
:six::six::six:
@waney 在homestead上,windows php不支持pcntl这个扩展
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".
npm run dev 运行不起来怎么回事呀
这个和 phphub 有多大区别呢
php artisan migrate
[Symfony\Component\Debug\Exception\FatalErrorException]
Cannot use Illuminate\Database\Eloquent\Model as Model because the name is already in use
这个有知道什么原因的吗?
赞 :+1:
有人知道这个什么问题吗?
@ahkxhyl 可以帮我看下我的问题吗
@ChenPHPER 论坛已经有类似问题的答案.总而言之就是新版php对count()的要求更严格,必须是数组或者实现了countable的才能调用.
@sthwrong 有没有具体链接看看啦
@ChenPHPER 分享:PHP 7.2 中 count 更加严格了
@sthwrong 我是直接用isset方法解决的
@Summer summerblue/administrator项目需要维护了,在PHP7.2情况下,多处使用sizeof()函数报错。要实现countable或者改用其他函数。。
請問 redis 有些問題
redis 已經安裝了
是用 composer require predis/predis 安裝了
可是就是不行,如圖,有誰知道如何做?
將 use Redis
改成
use Illuminate\Support\Facades\Redis
解決
扩展性考虑
安装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
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:
You can also run
php --ini
inside terminal to see which files are used by PH P in CLI mode.怎么解决???
@SanHuo
@Summer
哦。不过我的解决方法是:进入虚拟机里的项目所在文件夹进行安装相关依赖。 :joy:
Illuminate\Contracts\Container\BindingResolutionException
Target class [itemconfig] does not exist.
请问报这个错误该怎么处理呢?