kerwin/simpleframe

此包最新版本(2.2)没有可用的许可信息。

具有身份验证功能的简单框架

安装: 3

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

公开问题: 0

语言:Twig

类型:项目

2.2 2022-03-21 14:41 UTC

This package is auto-updated.

Last update: 2024-09-29 06:20:25 UTC


README

  1. 系统信息
  2. 数据库
    1. 介绍
    2. 指令
  3. 容器
  4. 控制器
  5. 模型
    1. 介绍
    2. 设置主键
    3. 将模型添加到容器
    4. 功能
  6. 视图
    1. 介绍
    2. 布局扩展
    3. 应用
  7. 路由
    1. 介绍
    2. 应用
  8. 中间件
    1. 介绍
    2. 应用
  9. 日志
    1. 介绍
    2. 应用

系统信息

🔼

  • 开发环境

1. 安装框架

composer create-project kerwin/simpleframe simpleframe --repository="{\"type\": \"vcs\",\"url\": \"https://github.com/jhuei0831/simpleframe.git\"}"
  • 编辑设置文件 .env

2. 安装npm包

npm install

3. 建立tailwind css

开发时使用

npm run build:tailwind-dev

开发完成后使用

npm run build:tailwind-prod
  • 将tailwind css相关设置到 tailwind.config.js 文件中
  • 设置tailwind css文件输出路径请在 package.jsonscripts 设置中

4. 设置webpack

开发时使用

npm run watch

开发完成后使用

npm run serve
  • webpack相关设置请到 webpack.config.js 文件中设置

5. setting.php

  • 在config/setting.php中可以设置允许查看错误信息的IP列表

6. .htaccess

  • RewriteBase 你的路径

7. 建立数据库和数据

vendor\bin\phinx migrate
vendor\bin\phinx seed:run

8. 降低PHP版本

  • 在composer.json中添加,以降至7.2版本为例
"config": {
    "platform": {
        "php": "7.2.0"
    }
}
  • 删除composer.lock/vender后执行composer update

数据库

🔼

介绍

使用robmorgan/phinx,通过指令的方式建立或加入测试数据到数据表。

数据表schema放在/database/migrations下,数据建立放在/database/seeds下。

如果要更改放置位置可以到/phinx.php中修改

phinx.php

<?php
..省略...

return
[
    'paths' => [
        'migrations' => '%%PHINX_CONFIG_DIR%%/database/migrations',
        'seeds' => '%%PHINX_CONFIG_DIR%%/database/seeds'
    ],
    ...省略...
];

指令

建立迁移

vendor\bin\phinx create MyNewMigration

详细请参考这里

容器

🔼

app\config.php中加入设置并通过app\bootstrap.php执行。

相关设置请参考: https://php-di.org/

控制器

🔼

放在app\Http\Controller下,function可以使用加入Container的类(class)

<?php

namespace App\Http\Controller\Manage;

use Twig\Environment;

class UserController
{
    /**
     * 使用者管理頁面
     *
     * @return void
     */
    public function index(Environment $twig)
    {
        echo $twig->render('manage/users/index.twig');
    }
}

模型

🔼

介绍

放在app\Models下,必须加入Container,可以。

<?php

namespace App\Models;

use Kerwin\Core\Model;

class User extends Model
{
    
}

设置主键

$primaryKey = 'id';

将模型添加到容器

// Models
User::class => create(User::class)

功能

all

返回全部列数数据

public function index(User $user)
{
    return $user->all();
}

find

返回特定主键数据

public function show(User $user, $id)
{
    return $user->find($id);
}

insert

新增数据

public function store(User $user)
{
    return $user->insert(['name' => 'Jack', 'email' => 'jack@simpleframe.com']);
}

update

更新数据

public function update(User $user, $id)
{
    return $user->update($id, ['name' => 'Jack', 'email' => 'LoveRose@simpleframe.com']);
}

delete

删除数据

public function delete(User $user, $id)
{
    return $user->delete($id);
}

视图

🔼

介绍

View使用Twig,通过ControllerRoute将View展示出来

布局扩展

设置View扩展

SimpleFrame已做一些基本的设置,位于App\Services\Twig\LayoutExtension.php,相关设置可以参考这里

应用

public function index(User $user)
{
    $users = $user->all();

    echo $this->twig->render('index.twig', [
        'users' => $users
    ]);
}

index.twig

{% for user in users %}

名字: {{ user.name }}
信箱: {{ user.email }}

{% endfor %}

路由

🔼

介绍

路由是基于nikic/FastRoute进行修改的,在simpleframe/index.php中设置

应用

<?php
$root = "./";
include($root.'config/settings.php');

use Kerwin\Core\Router\RouteCollector;
use function Kerwin\Core\Router\simpleDispatcher;

$container = require __DIR__ . '/app/bootstrap.php';

$dispatcher = simpleDispatcher(function (RouteCollector $route) {
    $route->addGroup('/simpleframe', function (RouteCollector $route) {
        # /simpleframe/
        $route->get('/', 'App\Http\Controller\HomeController');
        # /simpleframe/auth
        $route->addGroup('/auth', function (RouteCollector $route) {
            # /simpleframe/auth/login
            $route->get('/login', ['App\Http\Controller\Auth\LoginController', 'index']);
            $route->post('/login', ['App\Http\Controller\Auth\LoginController', 'login']);
        });
    });
});

$dispatcher->process($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $container);

中间件

🔼

介绍

  1. 中间件必须建立在App\Http\Middleware下,必须使用抽象类Kerwin\Core\Router\Middleware\Middleware

  2. 建立中间件后必须加入Container

  3. 中间件设置必须加在addRouteaddGroup前,如果加在addGroup则下面的路由都会生效。

应用

中间件

# 如果未登入,就導向404頁面

<?php

namespace App\Http\Middleware;

use Closure;
use Twig\Environment;
use Kerwin\Core\Request;
use Kerwin\Core\Support\Facades\Session;
use Kerwin\Core\Router\Middleware\Middleware;

class AuthMiddleware implements Middleware
{
    private $twig;

    public function __construct(Environment $twig) {
        $this->twig = $twig;
    }

    public function __invoke(Request $request, Closure $next, $arg = NULL)
    {
        if (!Session::get('USER_ID')) {
            echo $this->twig->render('_error/404.twig');
            return;
        }

        return $next($request);
    }
}

容器

// Middleware
'auth' => function (Environment $twig) {
    return new App\Http\Middleware\AuthMiddleware($twig);
},

路由

$route->middleware('auth')->get('/user/info', ['App\Http\Controller\Auth\LoginController', 'index']);

日志

🔼

介绍

使用monolog配合自己建立的PDOHandler将Log数据存储在数据库中,已经将Log加入Container

应用

public function login(Request $request, Log $log): void
{
    ...省略...
    $log->info('登入成功');
    ...省略...
    $log->error('登入失敗', ['account' => $data['email']]);
}