mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-18 05:16:30 +00:00
merged branch jonathaningram/patch-1 (PR #549)
Commits -------989bb22Removed trailing white spacesf880babHelp the developer when they specify an invalid filter by providing some alternatives Discussion ---------- Help the developer when they specify an invalid filter by providing some... ... alternatives. Bug fix: no Feature addition: yes Backwards compatibility break: no Uses a simple `strpos` search (no fancy diff to determine what the filter could be). There is no impact to runtime performance because this is all happening during template compilation. Examples: ```jinja {{ my_entity|json }} ``` Shows exception: `The filter "json" does not exist. Did you mean "json_encode"?` ```jinja {{ my_date|dat }} ``` Shows: `The filter "dat" does not exist. Did you mean "date"?` ```jinja {{ my_var|f }} ``` Shows: `The filter "f" does not exist. Did you mean "format", "default", "_default", "format_args", "format_args_as_text", "file_excerpt", "format_file", "format_file_from_text", "file_link"?` Also good for custom filters created in your own domain `st_`: ```jinja {{ my_var|st_ }} ``` Shows: `The filter "st_" does not exist. Did you mean "st_friendly_date", "st_site_test_url"?` --------------------------------------------------------------------------- by stof at 2011/12/04 16:34:27 -0800 I like the idea to provide help to the developer in case of error. You should probably do the same for functions --------------------------------------------------------------------------- by Tobion at 2011/12/05 05:56:29 -0800 +1 for a combination of string starts with (suggesting domain specific filters, e.g. st_*) and levenshtein for typos --------------------------------------------------------------------------- by chucktrukk at 2011/12/05 08:13:10 -0800 +1. This would be really helpful.
This commit is contained in:
@@ -19,8 +19,23 @@ class Twig_Node_Expression_Filter extends Twig_Node_Expression
|
||||
public function compile(Twig_Compiler $compiler)
|
||||
{
|
||||
$name = $this->getNode('filter')->getAttribute('value');
|
||||
|
||||
if (false === $filter = $compiler->getEnvironment()->getFilter($name)) {
|
||||
throw new Twig_Error_Syntax(sprintf('The filter "%s" does not exist', $name), $this->getLine());
|
||||
$alternativeFilters = array();
|
||||
|
||||
foreach ($compiler->getEnvironment()->getFilters() as $filterName => $filter) {
|
||||
if (false !== strpos($filterName, $name)) {
|
||||
$alternativeFilters[] = $filterName;
|
||||
}
|
||||
}
|
||||
|
||||
$exceptionMessage = sprintf('The filter "%s" does not exist', $name);
|
||||
|
||||
if (count($alternativeFilters)) {
|
||||
$exceptionMessage = sprintf('%s. Did you mean "%s"?', $exceptionMessage, implode('", "', $alternativeFilters));
|
||||
}
|
||||
|
||||
throw new Twig_Error_Syntax($exceptionMessage, $this->getLine());
|
||||
}
|
||||
|
||||
$this->compileFilter($compiler, $filter);
|
||||
|
||||
Reference in New Issue
Block a user