Запустить статический метод класса можно вызовом через объект этого класса:
class Test {
private $x = 10;
public static function getSTatic() {
return 'static';
}
public function getNormal() {
return 'normal ' . $this->x;
}
}
Теперь в контроллере нужно создать объект этого класса и передать в шаблон:
{{ test.normal }}
{{ test.static }}
В вашем случае можно вызвать вот так:
{{ city.nameFromId(salonTables.cityId)) }}
, где city - объект класса City.
Но вообще-то у вас лучше переделать всё полностью. Судя по тегу Symfony в вопросе, вы пользуетесь фреймворком Symfony2. Тогда вам вообще не стоит писать статические методы для получения записей, воспользуйтесь доктриной.
1) В шаблоне неправильно обращаться к базе данных, правильно подготовить все нужные данные в контроллере и передать их в шаблон:
class SalonController extends Controller
{
/**
* @Route("/salon/{id}")
* @Template
*/
public function salonAction($id)
{
$salons = $this->getDoctrine()->getRepository('AppBundle:City')->findBy(array('cityId' => $id));
return array('salons' => $salons);
}
}
2) твиг сам экранирует вывод, делать |escape не обязательно
3) не стоит добавлять слово table в имя сущности, гораздо лучше писать их вот так:
{% for salon in salons %}
{ salon.name }}
{{ salon.cityId }}
{% endfor %}