kerwin/simpleframe

There is no license information available for the latest version (2.2) of this package.

simple framework with auth

Installs: 3

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Language:Twig

Type:project

2.2 2022-03-21 14:41 UTC

This package is auto-updated.

Last update: 2022-08-29 11:38:45 UTC


README

  1. 系統資訊
  2. Database
    1. 介紹
    2. 指令
  3. Container
  4. Controller
  5. Model
    1. 介紹
    2. 設定主鍵
    3. 將Models加入Container
    4. 功能
  6. View
    1. 介紹
    2. LayoutExtension
    3. 應用
  7. Route
    1. 介紹
    2. 應用
  8. Middleware
    1. 介紹
    2. 應用
  9. Log
    1. 介紹
    2. 應用

系統資訊

🔼

  • 開發環境
PHP 7.4.13
MariaDB 10.4.17
Apache 2.4.46

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

Database

🔼

介紹

使用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'
    ],
    ...省略...
];

指令

建立migration

vendor\bin\phinx create MyNewMigration

詳細請參考這裡

Container

🔼

app\config.php中加入設定並透過app\bootstrap.php執行。

相關設定請參考: https://php-di.org/

Controller

🔼

放在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');
    }
}

Model

🔼

介紹

放在app\Models底下,必須要加入Container,可以對。

<?php

namespace App\Models;

use Kerwin\Core\Model;

class User extends Model
{
    
}

設定主鍵

$primaryKey = 'id';

將Models加入Container

// 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

🔼

介紹

View是使用Twig,透過ControllerRoute將View呈現出來

LayoutExtension

設定View Extension

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 %}

Route

🔼

介紹

路由是使用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);

Middleware

🔼

介紹

  1. 中間件必須建立在App\Http\Middleware底下,必須使用抽象類別Kerwin\Core\Router\Middleware\Middleware

  2. 建立中間件後必須要加入Container

  3. 中間件設定必須加在addRouteaddGroup前方,如果加在addGroup則底下路由都會生效。

應用

Middleware

# 如果未登入,就導向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);
    }
}

Container

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

Route

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

Log

🔼

介紹

使用monolog搭配自己建立的PDOHandler將Log資料儲存在資料庫中,已經有將Log加入Container

應用

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