mirror of
https://github.com/predis/predis.git
synced 2026-08-23 18:53:24 +00:00
111 lines
2.6 KiB
PHP
111 lines
2.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) 2009-2020 Daniele Alessandri
|
|
* (c) 2021-2025 Till Krüss
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Predis\Command\Processor;
|
|
|
|
use InvalidArgumentException;
|
|
use Predis\Command\CommandInterface;
|
|
use Predis\Command\PrefixableCommandInterface;
|
|
|
|
/**
|
|
* Command processor capable of prefixing keys stored in the arguments of Redis
|
|
* commands supported.
|
|
*/
|
|
class KeyPrefixProcessor implements ProcessorInterface
|
|
{
|
|
private $prefix;
|
|
private $commands;
|
|
|
|
/**
|
|
* @param string $prefix Prefix for the keys.
|
|
*/
|
|
public function __construct($prefix)
|
|
{
|
|
$this->prefix = $prefix;
|
|
}
|
|
|
|
/**
|
|
* Sets a prefix that is applied to all the keys.
|
|
*
|
|
* @param string $prefix Prefix for the keys.
|
|
*/
|
|
public function setPrefix($prefix)
|
|
{
|
|
$this->prefix = $prefix;
|
|
}
|
|
|
|
/**
|
|
* Gets the current prefix.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getPrefix()
|
|
{
|
|
return $this->prefix;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function process(CommandInterface $command)
|
|
{
|
|
if ($command instanceof PrefixableCommandInterface) {
|
|
$command->prefixKeys($this->prefix);
|
|
} elseif (isset($this->commands[$commandID = strtoupper($command->getId())])) {
|
|
$this->commands[$commandID]($command, $this->prefix);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets an handler for the specified command ID.
|
|
*
|
|
* The callback signature must have 2 parameters of the following types:
|
|
*
|
|
* - Predis\Command\CommandInterface (command instance)
|
|
* - String (prefix)
|
|
*
|
|
* When the callback argument is omitted or NULL, the previously
|
|
* associated handler for the specified command ID is removed.
|
|
*
|
|
* @param string $commandID The ID of the command to be handled.
|
|
* @param mixed $callback A valid callable object or NULL.
|
|
*
|
|
* @throws InvalidArgumentException
|
|
*/
|
|
public function setCommandHandler($commandID, $callback = null)
|
|
{
|
|
$commandID = strtoupper($commandID);
|
|
|
|
if (!isset($callback)) {
|
|
unset($this->commands[$commandID]);
|
|
|
|
return;
|
|
}
|
|
|
|
if (!is_callable($callback)) {
|
|
throw new InvalidArgumentException(
|
|
'Callback must be a valid callable object or NULL'
|
|
);
|
|
}
|
|
|
|
$this->commands[$commandID] = $callback;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function __toString()
|
|
{
|
|
return $this->getPrefix();
|
|
}
|
|
}
|