contributte / planette-site

💀 [DISCONTINUED] All the roads go through the Planette
https://planette.vercel.app
MIT License
9 stars 3 forks source link

2016-02-02: globalni-registrace-latte-filtru-v-jedne-tride #141

Closed paveljanda closed 7 years ago

paveljanda commented 7 years ago

Tímto článkem bych chtěl rozšířit myšlenku od Davida Matějky zde.

A to jak si jednoduše zaregistrovat filtry přes config.neon a přidávat si další jenom rozšiřovaním metod dané třídy.

services:
        latte.latteFactory:
                setup:
                        - addFilter(NULL, [App\Filters, loader])
namespace App;

class Filters
{
        /**
         * @param string
         * @return mixed
         */
        public static function loader(string $filter)
        {
                return (method_exists(__CLASS__, $filter) ? call_user_func_array([__CLASS__, $filter], array_slice(func_get_args(), 1)) : NULL);
        }

        /**
         * @param string
         * @return string
         */
        public static function myFilter(string $s): string {
                return "{$s}ek";
        }
}
{var $foo = "Aleš"}
{$foo|myFilter}

Název filtru je určen jménem konkretní metody.

Návratová hodnota metody nesmí být NULL, jinak vám laděnka bude vypisovat chybu o neexistujícím filtru.

Použitelné pro Nette >= 2.3

paveljanda commented 7 years ago

author: ali (aleswita+nette@gmail.com)