淡馬色 / 船長
船長是一个基于 Slim 和 Phinx 的轻量级 PHP 框架。
Requires
- php: >=5.6
- monolog/monolog: ^1.24
- phpmailer/phpmailer: ^6.0
- robmorgan/phinx: ^0.10.7
- slim/slim: ^3.12
- slim/twig-view: ^2.5
- symfony/console: ^3.4
This package is auto-updated.
Last update: 2024-09-26 00:42:11 UTC
README
船長是一个基于 Slim 和 Phinx 开发的轻量级框架
建立控制器
在项目目录下创建一个名为 Controllers 的目录,然后创建一个 Controller 的 PHP 文件,例如:
<?php namespace Sailor\Controllers; use Sailor\Core\Controller; class TestContrller extends Contrller { public function show() { echo 'This is a test page'; } }
路由器
建立路由器
在项目目录下创建一个名为 routes 的目录,然后创建一个 route 的 PHP 文件,例如:
<?php use Sailor\Core\Router; Router::get('/test', 'TestController::show')->setName('TestShow');
完成后,在浏览器的地址栏输入:https://yourwebsite/test,即可执行您在 Controller 内的程序。
建立分组路由器
在 route 文件中使用 group 函数,例如:
<?php use Sailor\Core\Router; Router::group('/test', function() { Router::get('/show', 'TestController::show')->setName('TestShow'); });
完成后,在浏览器的地址栏输入:https://yourwebsite/test/show,即可执行您在 Controller 内的程序。
中间件
在项目目录下创建一个名为 MiddleWares 的目录,然后创建一个 MiddleWare 的 PHP 文件,例如:
<?php namespace Sailor\MiddleWares; use Sailor\Core\Router; use Slim\Http\Request; use Slim\Http\Response; class MustSignInMiddleWare { public function __invoke(Request $request, Response $response, Callable $next) { $member = $_SESSION['member']; if (empty($member)) { return $response->withRedirect(Router::pathFor('ShowSignIn')); } return $next($request, $response); } }
完成后,将其添加到 route 文件中适当的位置,例如:
<?php use Sailor\Core\Router; Router::group('/test', function() { Router::get('/show', 'TestController::show')->setName('TestShow'); })->add(new MustSignInMiddleWare);
这样一来,所有包含 test 的 URL 请求都必须先进行会员登录。
数据处理
模型
在项目目录下创建一个名为 Models 的目录,并以数据库的 table 为基本单位,创建 Model 文件,例如:
<?php namespace Sailor\Models; use Pussle\ORM\Model; class TestTable extends Model { protected $table = 'test_table'; }
存储库
在项目目录下创建一个名为 Repository 的目录,然后创建一个 Repository 的 PHP 文件,并在适当的位置使用 Model,例如:
<?php namespace Sailor\Repository; use Sailor\Models\TestTable; class TestRepository { public function getTestDataById($id) { $Test = new TestTable; $Test->select(['id', 'name', 'desc', 'created_at']); $Test->where('id', $id); return $Test->fetch(); } }
在 Controller 中处理数据
<?php namespace Sailor\Controllers; use Sailor\Core\Controller; use Sailor\Repository\TestRepository; class TestContrller extends Contrller { public function show(TestRepository $TestRepostory) { $data = $TestRepostory->getTestDataById($id); } }
前端程序压缩与合并
在 bullets.mix.js 中设置好要压缩与合并的 CSS 和 JavaScript
const bullets = require('./build/bullets'); /** 共用的檔案 */ var commonCss = [ '../../node_modules/bootstrap/dist/css/bootstrap.css', 'common.css', 'dialog.css', 'switch.css', '../../node_modules/bootstrap-select/dist/css/bootstrap-select.min.css' ]; /** 欲合併的檔案 */ bullets.js(['app.js', 'signin/signin.js'], 'signin.js') .js(['app.js', '../../node_modules/drag2upload/drag2upload.jquery.js', 'member.js'], 'member.js') .css(commonCss.concat(['signin.css']), 'signin.css') .css(commonCss.concat(['error.css']) , 'error.css') .css(commonCss.concat(['member.css']) , 'member.css'); module.exports = (function(bullets) { return bullets.getConfig(); })(bullets);
设置完成后,使用 npm 进行压缩与合并
npm run prod
以上述的 app.js 和 signin/signin.js 合并为例,新生成的压缩合并文件为 signin.js,位于 public/js 之下,在 HTML 中只需加入:
<script src="/js/signin.js"></script>
或加入编号避免 JS 和 CSS 的文件缓存:
<script src="{{version('/js/signin.js')}}"></script>