evanskim/gnu-migration

: Gnuboard4 迁移工具

dev-master 2023-02-22 00:30 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

由于直接使用现有路由,因此可以通过以下方式访问。

http://gnu-migration.com/bbs/board.php?bo_table=test

Image of Example