淡馬色/船長

船長是一个基于 Slim 和 Phinx 的轻量级 PHP 框架。

安装: 28

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

公开问题: 1

类型:项目

dev-master 2021-03-14 17:29 UTC

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>