evanskim / gnu-migration
: Gnuboard4 迁移工具
Requires
- php: ^7.0
- laravel/laravel: ^5.5
This package is auto-updated.
Last update: 2024-09-28 12:26:02 UTC
README
这是一个开发用于将基于Gnuboard4的网站迁移到Laravel的工具的项目。
这是一个对基于Gnuboard4的网站进行以下重构的项目。
데이터베이스 - 그누보드4
서버 - 라라벨 5.7 RESTful API
프론트 - Vue.js
包括PHP 5.6不再受支持的问题,为了推广现代PHP,希望成为从现有遗留系统迁移到新现代PHP的小垫脚石。
曾经,由于过于容易访问,连我这样的计算机盲都敢尝试脚本编写,对此我真心感谢Gnuboard。然而,现在它已经过时了...现实...
从现在开始,为现代PHP让路吧!
gnu4 R.I.P
待办事项
现有用户登录找回密码用户注册论坛论坛 CRUD论坛皮肤设置 (Vue Dynamic Components)帖子 CRUD回复 CRUD评论 CRUD- 附件 CRUD
- 权限设置
- 管理员页面
- 用户管理
- 论坛管理
- 文件管理
- ...
- ...
由于Gnuboard的特性,有许多自定义案例,因此集成可能会很困难。但是,如果您认为有必要的功能,请提出请求或问题,我会考虑。
使用方法
安装
在安装了Laravel的文件夹中安装此包。Laravel 5.5及以上版本将自动注册服务提供者。之后,您可以从以下内容中选择所需的功能并应用。
composer require evanskim/gnu-migration
使用Gnuboard4数据库时遇到的最大问题是date类型列默认设置为'0000-00-00 00:00:00'。最近(mysql 5.7以上)不允许这样做,因此需要将其更改为null。否则,您可以在执行迁移之前将config/database.php中的strict值更改为false并执行,这样错误将被忽略,并且date类型的默认值将更改为null(在MYSQL中更改此选项后,不需要更改)。
如果需要更改现有列,则必须安装以下包。
composer require doctrine/dbal
config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4', // 경우에 따라 utf8 으로 설정
'collation' => 'utf8mb4_unicode_ci', // 경우에 따라 utf8_unicode_ci 으로 설정
'prefix' => '',
'prefix_indexes' => true,
'strict' => false, // true 값을 false 로 변경!
'engine' => null,
],
当使用session驱动程序时,必须确保g4_member表中存在mb_no(auto increment primary key)字段。如果没有该字段,则添加迁移文件并执行迁移。为了实现自动登录功能,还需要添加并执行以下迁移。
php artisan vendor:publish --provider="EvansKim\GnuMigration\GnuMigrationServiceProvider"
php artisan migrate
1.用户认证
可以使用现有g4_member表中的用户信息直接在Laravel中登录。请按照以下文件进行修改。
LoginController.php
use EvansKim\GnuMigration\AuthenticatesGnuMembers;
class LoginController extends Controller
{
use AuthenticatesGnuMembers; // 기존의 트레이스를 교체합니다.
config/auth.php认证驱动程序仅支持file和session。
'web' => [
'driver' => 'session',
'provider' => 'members', // 원래값은 users
],
'providers' => [
// 프로바이더에 새로 추가 또는
'members' => [
'driver' => 'gnu'
],
]
发送表单字段值的路由与现有值相同。大多数静态路由值遵循借用原则。
API
curl -X POST "http://mydomain/bbs/login.php"
-d "mb_id"="test" -d "mb_password"="test" -d "remember"="false" //or true
2.找回密码
可以使用Laravel的找回密码功能。请按照以下设置文件更改provider。
config/auth.php
'passwords' => [
'users' => [
'provider' => 'members', // users -> members 로 바꾸어 주세요.
'table' => 'password_resets',
'expire' => 60,
],
],
请更改以下控制器跟踪。app\Http\Controllers\Auth\ResetPasswordController.php
//use Illuminate\Foundation\Auth\ResetsPasswords;
use EvansKim\GnuMigration\GnuResetsPasswords as ResetsPasswords;
API
curl -X POST "http://mydomain/bbs/password_lost2.php" -d "email"="test@test.com"
3.会员注册
由于直接使用了Laravel的认证功能,因此可以扩展Laravel的事件和监听器以及Telescope,以便与Laravel基本认证相同的方式使用。
API
curl -X POST "http://gnu-migration.com/bbs/register_form_update.php" \
-d "mb_id"="test" \
-d "mb_password"="Test1234" \
-d "mb_name"="홍길동" \
-d "mb_nick"="테스터" \
-d "mb_email"="tester@test.com"
4.论坛列表
论坛已按模型和前端分离的结构进行结构化。一个论坛对应一个模型,可以根据设置应用不同的皮肤。前端全部使用vue.js处理,通过API调用通过ajax进行数据收发。通常论坛皮肤中前端和控制器模型都混合在一起,因此需要合理地区分它们。
모델 - app/Boards
뷰 - Vue
( vue-router 이용하여 List, Show, Edit, Create, Reply 페이지 라우팅)
컨트롤러 - EvansKim\GnuMigration\Controller\Board\GnuBoardController
(index,store,update,destroy)
这次选择的论坛皮肤的主要技术是Vue Dynamic Component。这是一种异步加载Vue component的方式。根据论坛设置的皮肤名,可以分别对论坛的整体主题和各个功能的主要页面进行自定义。以下Theme组件中可以包含BoardList、CreateForm、UpdateForm、ReplyForm、ShowPage等插槽。
<board-dynamic>
<theme>
<board-list></board-list>
</theme>
</board-dynamic>
4.1.论坛模型
由于Gnuboard扩展了论坛功能以实现多种自定义,因此为每个论坛创建了一个Eloquent模型类,并在该类中实现了扩展的功能。通过以下命令进行脚手架生成,生成在app/Boards目录下。
php artisan make:g4board test //게시판명
4.2.论坛前端资源编译
打开项目根目录中的webpack.mix.js文件,添加以下内容。
mix .js('resources/vendor/gnu/js/gnu.js', 'public/js')
.webpackConfig({
output: {
chunkFilename: 'js/lazy/[name].js'
}
});
// 라라벨에 기본적으로 세팅 되어 있는 값을 바꾸지 마세요.
// bootstrap.js 는 반드시 필요합니다. (axios 및 crsf 설정 필요)
安装编译所需的节点包。
npm install vue-router @babel/plugin-syntax-dynamic-import
将脚本编译到public/js中。
npm run dev
由于直接使用现有路由,因此可以通过以下方式访问。