kerwin / simpleframe
simple framework with auth
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Language:Twig
Type:project
Requires
- fzaninotto/faker: ^1.9
- guzzlehttp/guzzle: ^7.3
- jenssegers/agent: ^2.6
- kerwin/captcha: ^1.0
- kerwin/core: dev-main
- maximebf/debugbar: ^1.16
- monolog/monolog: ^2.3
- nikic/fast-route: ^1.3
- php-di/php-di: ^6.3
- robmorgan/phinx: ^0.12.5
- symfony/var-dumper: ^5.3
- twig/twig: ^3.3
- vlucas/phpdotenv: ^5.3
- wixel/gump: ^1.12
Requires (Dev)
- phpunit/phpunit: ^9.5
README
系統資訊
- 開發環境
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.json
的scripts
設定
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,透過Controller和Route將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
介紹
-
中間件必須建立在
App\Http\Middleware
底下,必須使用抽象類別Kerwin\Core\Router\Middleware\Middleware
。 -
建立中間件後必須要加入Container。
-
中間件設定必須加在
addRoute
或addGroup
前方,如果加在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']]); }