Rename and improve FormatterConfiguration extender

In the future we may have multiple Formatters, so by moving the config
callback to its own instance method we can leave the constructor
available to specify which formatter (like Assets and Routes). This
format also allows for other methods to be added.

Additionally, this adds logic to automatically flush the Formatter cache
whenever the extension is enabled or disabled.
This commit is contained in:
Toby Zerner 2018-06-17 10:44:39 +09:30 committed by Franz Liedke
parent 52d0b5f11e
commit 22c911476b
2 changed files with 55 additions and 37 deletions

View File

@ -0,0 +1,55 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Extend;
use Flarum\Extension\Event\Disabled;
use Flarum\Extension\Event\Enabled;
use Flarum\Extension\Extension;
use Flarum\Formatter\Event\Configuring;
use Flarum\Formatter\Formatter as ActualFormatter;
use Illuminate\Contracts\Container\Container;
use Illuminate\Events\Dispatcher;
class Formatter implements ExtenderInterface
{
protected $callback;
public function configure(callable $callback)
{
$this->callback = $callback;
return $this;
}
public function __invoke(Container $container, Extension $extension = null)
{
$events = $container->make(Dispatcher::class);
$events->listen(
Configuring::class,
function (Configuring $event) {
call_user_func($this->callback, $event->configurator);
}
);
// Also set up an event listener to flush the formatter cache whenever
// this extension is enabled or disabled.
$flush = function ($event) use ($container, $extension) {
if ($event->extension === $extension) {
$container->make(ActualFormatter::class)->flush();
}
};
$events->listen(Enabled::class, $flush);
$events->listen(Disabled::class, $flush);
}
}

View File

@ -1,37 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Extend;
use Flarum\Extension\Extension;
use Flarum\Formatter\Event\Configuring;
use Illuminate\Contracts\Container\Container;
use Illuminate\Events\Dispatcher;
class FormatterConfiguration implements ExtenderInterface
{
protected $callback;
public function __construct(callable $callback)
{
$this->callback = $callback;
}
public function __invoke(Container $container, Extension $extension = null)
{
$container->make(Dispatcher::class)->listen(
Configuring::class,
function (Configuring $event) {
call_user_func($this->callback, $event->configurator);
}
);
}
}