Как вызвать функцию вне папки контроллера и без маршрутов?

У меня есть следующий класс StringTools, определенный в пространстве имен Clanmovil\PlatformBundle\Tools:

namespace Clanmovil\PlatformBundle\Tools;

class StringTools
{
    /**
     * Generate as many unique permutations of letters for a given word
     * @param string $input
     * @return array
     */
    public static function permutationWords($input)
    {
        $input = strtolower($input);
        $results = [];
        $length = strlen($input);
        $counter = pow(2, $length);

        for($i=0; $i<$counter; $i++) {
            $binaryStr = str_pad(decbin($i), $length, '0', STR_PAD_LEFT);

            $variant = '';
            for($j=0; $j<$length; $j++) {
                $variant .= ($binaryStr[$j] == '1') ? strtoupper($input[$j]) : $input[$j];
            }
            $results[] = $variant;
        }

        return $results;
    }
}

Теперь я хочу использовать вывод этой функции, который позволяет сказать, что вызов, сделанный через AJAX, будет правильным:

  • создать контроллер и внутри создать функцию, которая создает экземпляр функции permutationWords(), а затем вызывает функцию контроллера через маршрут?
  • есть ли другой лучший и чистый способ добиться этого, и я не знаю?

person ReynierPM    schedule 17.12.2015    source источник


Ответы (1)


Что ж, вы можете сделать это практически без кода контроллера, а контроллер предназначен для веб-запросов, так что это лучший вариант. Практически без кода:

use Clanmovil\PlatformBundle\Tools\StringTools;

public function someAction (Request $request) {

    // this could be a JSON response etc
    return new Response(StringTools::permutationWords($request->get('someParam')));
}
person Richard    schedule 17.12.2015
comment
Я действительно сделал что-то подобное после того, как задал вопрос, но с использованием контроллера, так как мне нужно установить маршрут и вызвать этот маршрут из кода Javascript с использованием Ajax, поэтому лучше использовать контроллер с некоторыми маршрутами, чем действие по умолчанию без, как вы предлагаете, в любом случае, спасибо - person ReynierPM; 17.12.2015