kerwin / simpleframe
此包最新版本(2.2)没有可用的许可信息。
具有身份验证功能的简单框架
2.2
2022-03-21 14:41 UTC
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
系统信息
- 开发环境
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
数据库
介绍
使用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,通过Controller和Route将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);
中间件
介绍
-
中间件必须建立在
App\Http\Middleware
下,必须使用抽象类Kerwin\Core\Router\Middleware\Middleware
。 -
建立中间件后必须加入Container。
-
中间件设置必须加在
addRoute
或addGroup
前,如果加在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']]); }