boneframework/skeleton

Bone 框架

安装: 0

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

语言:JavaScript


README

Latest Stable Version Total Downloads License
build status Code Coverage Scrutinizer Code Quality
你想要一个带有当地海盗俚语的PHP框架吗?
它是七海中最可怕的框架!
http://github.com/boneframework

功能

  • PSR-7 HTTP 消息
  • PSR-11 依赖注入容器配置
  • PSR-15 中间件路由
  • i18n 翻译器
  • 自包含的包基于架构
  • 内置可选的Docker开发环境
  • 可扩展的命令行界面

安装

通过 composer

我们推荐使用我们的Docker环境,但是你也可以使用自己的设置,通过composer安装

composer create-project boneframework/skeleton your/path/here
cp your/path/here/.env.example your/path/here/.env

通过 docker

Docker开发环境让你免于所有常见的devops杂事。克隆 boneframework/lamp,然后替换代码文件夹 boneframework/skeleton,然后启动它。

git clone https://github.com/boneframework/lamp myproject
cd myproject
rm -fr code  // remove lamp stack default placeholder page
git clone https://github.com/boneframework/skeleton code
cp code/.env.example code .env
bin/setdomain yourdomain.com  // optional, default dev domain is boneframework.docker

127.0.0.1 boneframework.docker 添加到你的 /etc/hosts(或你的自定义域名)。要启动docker服务器环境

bin/start

然后浏览到 https://boneframework.docker,你将看到网站正在运行。

开发同时也在 http://boneframework.docker:8025 上运行Mailhog,因此你可以配置任何开发电子邮件使用SMTP端口 1025,所有发出的邮件都将出现在Mailhog的出站邮箱中。

MariaDB正在运行,在主机 mariadb 上(参见 docker-compose.yml),以及在 config/bone-db.php 中。

为了“SSH”到你的服务器以运行PHP命令(如composer等),请在新的终端窗口中键入以下内容。

bin/terminal php       // for the PHP container
bin/terminal mariadb   // for the DB container

要关闭你的服务器,按CTRL-C退出,然后键入 bin/stop

Bone框架的快速介绍

骨架项目文件

你的项目中有一些文件夹和文件,这里有一个简要说明

  • config(应用程序配置)
  • data(你的项目将使用的文件(翻译,缓存,上传等))
  • public(通常的index.php端点和前端资源如css、图像和js)
  • src(你的应用程序包在这里)
  • tests(因为知道你的代码是否工作良好总是很好的)
  • vendor(第三方composer库,不要编辑,不要提交!)

Bone框架应用程序周期

在启动Bone框架(《public/index.php》)时,应用程序执行几个操作

  • 开始一个会话
  • 从config文件夹加载配置(可以使用不同的文件夹用于不同的环境,或环境变量)
  • 注册Bone框架核心包
  • config/packages.php 中的包注册到DI容器中
  • 添加在 config/middleware.php 中配置的任何全局中间件
  • 分发一个请求,返回一个响应

配置

你可以在 config/ 文件夹中放入任意数量的 .php 文件。确保它们返回一个配置数组。您可以根据环境变量 APPLICATION_ENV 覆盖配置,例如,如果环境是生产,它将加载生产子目录中的附加配置。

包括几个配置文件,其中一些是为可选的Bone包,可能需要删除

bone-db.php 
bone-firewall.php 
bone-i18n.php 
bone-log.php 
layouts.php 
middleware.php 
packages.php
paginator.php
paths.php
site.php
views.php

在你的配置文件中,你可以添加任何你想要的内容。

包类

包是Bone框架应用程序中的一个关键组件。你将在 config/packages.php 中看到当前在框架上运行的包。请注意,顺序很重要,因为包可能需要从另一个包中定义的依赖。查看 src/App/AppPackage.php 内部。

<?php

namespace Bone\App;

use Bone\App\Controller\IndexController;
use Bone\Controller\Init;
use Bone\Router\Router;
use Bone\Router\RouterConfigInterface;
use Barnacle\RegistrationInterface;
use Barnacle\Container;

class AppPackage implements RegistrationInterface, RouterConfigInterface
{
    /**
     * @param Container $c
     */
    public function addToContainer(Container $c)
    {
        $c[IndexController::class] = $c->factory(function (Container $c) {
            $controller = new IndexController();

            return Init::controller($controller, $c);
        });
    }

    /**
     * @param Container $c
     * @param Router $router
     * @return Router
     */
    public function addRoutes(Container $c, Router $router): Router
    {
        $router->map('GET', '/', [IndexController::class, 'indexAction']);
        $router->map('GET', '/learn', [IndexController::class, 'learnAction']);

        return $router;
    }
}

你将看到两个方法,它们是 RegistrationInterfaceRouterConfigInterface 的实现。查看 league/route 文档以了解路由的用法。在 addToContainer() 方法中,你可以创建你的控制器和其他依赖项的工厂。

控制器

在上面的 App 包中,您会注意到控制器工厂返回了 Controller::init($controller, $c)。这是一个方便的初始化类,它将为您的类设置一些东西。为了让事情变得简单,以下是每个组件需要做的所有事情

  • 视图引擎(实现 Bone\View\ViewAwareInterface 并使用 Bone\View\Traits\HasViewTrait
  • 翻译器(实现 Bone\I18n\I18nAwareInterface 并使用 Bone\I18n\Traits\HasTranslatorTrait
  • 站点配置(实现 Bone\Server\SiteConfigAwareInterface 并使用 Bone\Server\Traits\HasSiteConfigTrait
  • 会话(实现 Bone\Server\SessionAwareInterface 并使用 Bone\Server\HasSessionTrait
  • 日志记录器(实现 Bone\Log\LoggerAwareInterface 并使用 Bone\Log\HasLoggerTrait

您还可以选择扩展 Bone\Controller\Controller,这将立即为您提供视图、翻译器和站点配置。

控制器操作方法

您可以在包类中看到配置的路由,以及要调用的控制器类和方法。每个操作方法本质上是一个 PSR-15 服务器请求处理器接口 https://www.php-fig.org/psr/psr-15/。参见 src/App/Controller/IndexController.php 以获取基本示例。

数据库

在主配置 config/bone-db.php 中设置您的默认数据库凭据,并在子目录中设置任何特定环境的配置

    'db' => [
        'host' => '127.0.0.1',
        'database' => 'bone',
        'user' => 'leChuck',
        'pass' => 'bigWh00p',
    ],

在您的包类中,您可以使用 $c->get(PDO::class) 从容器中获取连接。

国际化(i18n)

Bone 支持翻译到不同的区域设置。翻译文件(gettext .po.mo)应放置在 data/translations 下的区域设置子目录中,例如 data/translations/en_GB/en_GB.po。您可以设置默认区域设置和支持的区域设置数组。

<?php 

    use Laminas\I18n\Translator\Loader\Gettext;

    return [ 
        'i18n' => [ 
            'translations_dir' => 'data/translations', 
            'type' => Gettext::class, 
            'default_locale' => 'en_PI', 
            'supported_locales' => ['en_PI', 'en_GB', 'nl_BE', 'fr_BE'], 
        ], 
    ];

要使用翻译器,您可以简单调用:

<?php
// from a controller: 
$this->getTranslator()->translate('placeholder.string'); 
// to set locale
$this->getTranslator()->setLocale($locale);
// from a view file:
$this->t('placeholder');

您还可以将支持的区域设置设置为任何 URL,它将被从请求中删除,并设置区域设置。例如,如果您有一个端点 /morte/info,您可以将其设置为 /nl_BE/more/info 或其他,您的路由仍然可以解析,但现在区域设置将是您设置的。您可以在视图文件中调用 $this->l(),以生成这个 url 的第一部分。

日志记录

Bone 使用 monolog/monolog,日志记录文件位于 data/logs。目前我们只支持写入文件,但您可以添加任意多的通道。

<?php 
return [ 
    'log' => [ 
        'channels' => [ 
            'default' => 'data/logs/default_log', 
        ], 
    ], 
];

在控制器中使用日志记录器

$this->getLogger()->debug($message) // or error(), etc, see PSR-3

推荐包

Bone 框架已经有很多扩展框架的包。试试这些!

  • delboy1978uk/bone-form - 生成表单,处理错误,国际化兼容
  • delboy1978uk/bone-doctrine - Doctrine 实体管理器
  • delboy1978uk/bone-mail - Bone 框架的邮件功能
  • delboy1978uk/bone-user - 完整的用户注册系统,包括激活邮件等
  • delboy1978uk/generator - 快速生成新的包模板
  • delboy1978uk/bone-oauth2 - OAuth2 授权和资源服务器
  • delboy1978uk/bone-open-api - Open API Swagger 文档
  • delboy1978uk/image - 基于 gd 的简单图像类

开始冒险!gaarrrrr!