interitty / flash-message-control
为使用Nette框架的应用程序提供的视觉组件,允许它们以统一的方式轻松地在任何地方处理闪存消息。
v1.0.4
2024-09-01 11:41 UTC
Requires
- php: ~8.3
- dg/composer-cleaner: ~2.2
- interitty/application: ~1.0
Requires (Dev)
- interitty/code-checker: ~1.0
- interitty/phpunit: ~1.0
README
为使用Nette框架的应用程序提供的视觉组件,允许它们以统一的方式轻松在任何地方处理闪存消息。
要求
- PHP >= 8.3
安装
安装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)