Bolt\Storage\Query\QueryParameterParser::parseValue PHP Method

parseValue() public method

This method uses the defined value matchers to parse a passed in value to the following component parts: [ 'value' => 'operator' => 'matched' => ]
public parseValue ( string $value ) : array
$value string Value to process
return array Parsed values
    public function parseValue($value)
    {
        foreach ($this->valueMatchers as $matcher) {
            $regex = sprintf('/%s/', $matcher['token']);
            $values = $matcher['params'];
            if (preg_match($regex, $value)) {
                if (is_callable($values['value'])) {
                    preg_match($regex, $value, $output);
                    $values['value'] = $values['value']($output[1]);
                } else {
                    $values['value'] = preg_replace($regex, $values['value'], $value);
                }
                $values['matched'] = $matcher['token'];
                return $values;
            }
        }
        throw new QueryParseException(sprintf('No matching value found for "%s"', $value));
    }

Usage Example

 public function testLikeValueParse()
 {
     $p = new QueryParameterParser();
     $expr = $p->parseValue('%fred%');
     $this->assertEquals('%fred%', $expr['value']);
     $this->assertEquals('like', $expr['operator']);
     $p = new QueryParameterParser();
     $expr = $p->parseValue('fred%');
     $this->assertEquals('fred%', $expr['value']);
     $this->assertEquals('like', $expr['operator']);
     $p = new QueryParameterParser();
     $expr = $p->parseValue('%fred');
     $this->assertEquals('%fred', $expr['value']);
     $this->assertEquals('like', $expr['operator']);
     $p = new QueryParameterParser();
     $expr = $p->parseValue('!');
     $this->assertEquals('', $expr['value']);
     $this->assertEquals('isNotNull', $expr['operator']);
     $p = new QueryParameterParser();
     $expr = $p->parseValue('[1,2,3]');
     $this->assertEquals('1,2,3', $expr['value']);
     $this->assertEquals('in', $expr['operator']);
 }