parable-php/framework

Parable PHP 框架是一个极简框架

2.0.5 2021-10-08 12:18 UTC

This package is auto-updated.

Last update: 2024-09-08 18:31:08 UTC


README

Workflow Status Latest Stable Version Latest Unstable Version License

Parable 是一个 PHP 框架,有两个目标:它足够简单,并且不强制执行一种构建方式。

安装

需要 Php 8.0+ 和 composer

$ composer require parable-php/parable

要设置 parable,请运行以下命令并按照交互式问题操作

$ vendor/bin/parable install

使用方法

安装后(并且您选择安装示例应用)您将有一个示例应用可供查看。

Parable 2.0 基于插件来安排一切。它不是一个让您在框架之外以特定方式做事的框架。

如果您想设置路由? RoutesPlugin。设置配置? ConfigPlugin。只要将它们添加到 Boot.php,它们就会在适当的时间加载。

Application::PLUGIN_BEFORE_BOOT 应包含需要在数据库或会话加载之前加载的插件。例如,ConfigPlugin 应该在这里,这样您就可以设置数据库。Application::PLUGIN_AFTER_BOOT 是用于需要数据库的插件。

示例 ConfigPlugin

parable 命名空间中的任何内容都会被 Application 类用于设置特定内容。您不必使用这些(此示例文件显示了所有可能的值),但您可以这样做,如果它更快/更简单的话。

在下面的示例中,yourstuff 是向应用程序中使用的 Config 实例添加自定义配置值的示例。在这里添加您想要的任何内容!

class ConfigPlugin implements PluginInterface
{
    public function __construct(
        protected Config $config
    ) {}

    public function run(): void
    {
        $this->config->setMany([
            'parable' => [
                'default-timezone' => 'Europe/Amsterdam',
                'database' => [
                    'type' => Database::TYPE_MYSQL,
                    'host' => 'localhost',
                    'username' => 'username',
                    'password' => 'password',
                    'database' => 'database',
                    'charSet' => 'utf8mb4',
                    'port' => 40673,
                    // all other values, see https://github.com/parable-php/orm/blob/master/README.md for more
                ],
                'session' => [
                    'enabled' => true,
                    'name' => 'app_session_name',
                ],
                'debug' => [
                    'enabled' => (bool)getenv('DEBUG_ENABLED'),
                    'levels' => E_ALL | ~E_DEPRECATED,
                ],
            ],
            'yourstuff' => [
                'extensions' => [
                    CleanerExtension::class,
                ],
            ],
        ]);
    }
}

示例 RoutingPlugin

要设置路由,只需添加一个 RoutingPlugin,并将其放置在 PLUGIN_BEFORE_BOOTPLUGIN_AFTER_BOOT 中,具体取决于您是否需要首先激活会话/数据库。

有关 parable-php/routing 的完整信息,请参阅该包的 README.md

class RoutingPlugin implements PluginInterface
{
    public function __construct(
        protected Router $router,
        protected Path $path
    ) {}

    public function run(): void
    {
        $this->router->add(
            ['GET'],
            'site-index',
            '/',
            [SiteController::class, 'indexAction'],
            ['template' => $this->path->getPath('src/Templates/Site/index.phtml')]
        );
    }
}

能够设置 template 是 Parable 2.0.0 的特定功能。默认情况下,parable-php/routing 不理解模板,因此它作为元数据传递,而框架本身可以处理 template 元数据。

预期模板文件只是 php 文件(但在这里命名为 phtml 以指示它是一个模板)。请参阅示例应用中的 welcome.phtml 以了解如何使用它。

通过在文件顶部设置此内容,您将能够访问许多内置功能

/** @var \Parable\Framework\Http\Template $this */

请参阅 Template.php 的最顶部的文档块以查看可用的内容,但您可以从访问 Di 容器 ($this->container) 到事件 ($this-events) 做任何事情。

我经常被问到的一个问题是“我如何将数据从控制器传递到模板/视图?”。

亲爱的朋友,这很简单。在控制器

public function __construct(protected DataCollection $dataCollection) {}

public function someAction() {
    $this->dataCollection->set('viewData', [
        'value' => 'this is value',
        'bool' => true,    
    ]);
}

在模板中,如果您已经添加了如我建议的 @var \Parable\Framework\Http\Template $this?很简单!

echo 'Value is ' . $this->data->get('viewData.value');

DataCollectionparable-php/getset 是专门用于自由形式数据存储和跨文件共享的,因此它非常适合此目的。

请注意,您不需要控制器或模板!您也可以传递一个匿名函数,这对于小型简单的 REST API 完美。

$this->router->add(
    ['GET'],
    'api-index',
    '/api',
    static function () {
        echo json_encode([
            'status' => 'success',
        ]);
    },
);

parable-php/framework 中使用的包

请查看以下包,以了解您可能对如何处理它们有任何疑问。它们的行为作为框架的一部分完全可用,Parable 2.0 不会采取任何特殊措施来阻止您或以奇怪的方式包装它们。添加的大部分内容仅用于作为 Config 流程的一部分进行设置,这些都不是必需的。

感谢

我想感谢以下这些人在启发、挑战和与我一起头脑风暴关于想法以及如何使Parable成为我从未在任何地方找到过的最佳框架方面的贡献。

  • Dave van der Brugge 因为他近乎疯狂的注重细节,经常问“为什么?”,以至于有一次让我哭了出来。
  • Thijs Riezebeek 无论是否愿意,都成为我的头脑风暴伙伴。他从不质疑我每一个决定的每一个方面。这是好事!
  • Jerry van Kooten 因为他总是超出我对他知识水平的预期,并测试我的东西。还因为他实际上在不喜欢某些东西时创建PR,极大地改进了几个包。
  • Lucas Grossi 选择使用Parable的alpha版本进行实际的专业项目,迫使我发布2.0.0版本,否则它永远不会被批准。

贡献

欢迎提出建议、错误报告或一般反馈。请使用github issues和pull requests,或者在我所在的devvoh.com上找到我。

许可

所有Parable组件都是开源软件,采用MIT许可证。