interitty/flash-message-control

为使用Nette框架的应用程序提供的视觉组件,允许它们以统一的方式轻松地在任何地方处理闪存消息。

v1.0.4 2024-09-01 11:41 UTC

This package is auto-updated.

Last update: 2024-09-01 09:43:55 UTC


README

为使用Nette框架的应用程序提供的视觉组件,允许它们以统一的方式轻松在任何地方处理闪存消息

要求

安装

安装interitty/flash-message-control的最佳方式是使用Composer

composer require interitty/flash-message-control

config.neon中注册

然后在Nette配置文件中注册组件

# app/config/config.neon
services:
    FlashMessageControlFactory:
        implement: Interitty\FlashMessageControl\FlashMessageControlFactoryInterface

在演示者或控制器中注册

任何需要与闪存消息一起工作的组件或演示者都可以添加此组件。

<?php

declare(strict_types=1);

namespace App\Presenters;

use Interitty\FlashMessageControl\FlashMessageControl;
use Interitty\FlashMessageControl\FlashMessageControlFactoryInterface;
use Interitty\FlashMessageControl\FlashMessageControlHelperTrait;
use Nette\Application\UI\Presenter;

abstract class BasePresenter extends Presenter
{
    use FlashMessageControlHelperTrait;

    protected FlashMessageControlFactoryInterface $flashMessageControlFactory;

    public function injectFlashMessageControlFactory(FlashMessageControlFactoryInterface $flashMessageControlFactory): void
    {
        $this->flashMessageControlFactory = $flashMessageControlFactory;
    }

    protected function createComponentFlashMessage(string $name = 'flashMessage'): FlashMessageControl
    {
        $component = $this->flashMessageControlFactory->create($this, $name);
        return $component;
    }
}

ℹ️ 简化注册

如果应用程序中使用了扩展interitty/component-model,则演示者中的注册会更加简单。

><?php

>declare(strict_types=1);

>namespace App\Presenters;

>use Interitty\ComponentModel\ComponentLocatorTrait;
>use Interitty\FlashMessageControl\FlashMessageControlHelperTrait;
>use Nette\Application\UI\Presenter;

>abstract class BasePresenter extends Presenter
>{
   use ComponentLocatorTrait;
   use FlashMessageControlHelperTrait;
>}

在latte模板中注册

一旦组件注册成功,你就可以轻松地在latte模板中渲染它。

{control flashMessage}

使用方法

由于使用了FlashMessageControlHelperTrait辅助函数,因此可以添加适当类型的闪存消息。

<?php

declare(strict_types=1);

namespace App\Presenters;

use Interitty\FlashMessageControl\FlashMessageControlFactory;
use Interitty\FlashMessageControl\FlashMessageControlHelperTrait;
use Nette\Application\UI\Presenter;

abstract class BasePresenter extends Presenter
{
    use FlashMessageControlHelperTrait;

    public function renderDefault()
    {
        $this->flashMessageSuccess('The :control was succesfully registered.', ['control' => FlashMessageControlFactory::class]);
    }
}

也可以使用其他标准flashMessage方法,该方法已扩展了第三个参数来传递额外的参数,这些参数将在翻译后替换其:placeholders

所有这些方法都返回一个Interitty\FlashMessageControl\FlashMessage对象,该对象具有流畅的接口,可用于可能的进一步设置。

<?php

declare(strict_types=1);

namespace App\Presenters;

use Interitty\FlashMessageControl\FlashMessage;
use Interitty\FlashMessageControl\FlashMessageControlHelperTrait;
use Nette\Application\UI\Presenter;

abstract class BasePresenter extends Presenter
{
    use FlashMessageControlHelperTrait;

    public function renderDefault()
    {
        $this->flashMessage()
            ->setMessage('The Interitty flash messages are :status!')
            ->setType(FlashMessage::TYPE_SUCCESS)
            ->addData('status', 'awesome');
    }
}

自定义模板

默认情况下,组件使用一个模板,该模板将单个闪存消息渲染为具有适当CSS类设置的单独的div块。

但是,设置自定义渲染方法肯定很有用。这可以通过在Nette配置文件中直接设置自定义模板的路径轻松完成。

# app/config/config.neon
services:
    FlashMessageControlFactory:
        implement: Interitty\FlashMessageControl\FlashMessageControlFactoryInterface
        setup:
            - setTemplateFile(%appDir%/Controls/FlashMessage/FlashMessageControlCustom.latte)