2017-02-20 19 views
2

У меня есть простое приложение в PHP Slim (новейшая версия), это простой веб-сайт, который получает данные из базы данных и отображает их на шаблонах веток. Ничего особенного. Все работает отлично, пока я не пытаюсь добавить пользовательскую функцию к веточке.SlimPHP - странная ошибка с расширяющейся веточкой (функция)

Когда я добавить пользовательскую функцию прутик, на некоторых серверах (на локальном хосте laragoon работает отлично, на производственном сервере с той же версией PHP не я получаю эту ошибку:

Фатальная ошибка: Невозможно создать абстрактный Twig_Function класса в ... twig.php на линии 4

ниже моего twig.php - ошибка связана с новой Twig_Function, но если честно я не вижу абстрактного класса здесь ..., и на локальном хосте Laragon это работающий штраф, по производству

Кто-нибудь знает, как решить эту проблему?

<?php 

$twig=$container->get('view')->getEnvironment(); 
$function = new Twig_Function('fotki', function ($id) use ($container) { 
    $files=array(); 
    $dir=opendir($container->get('settings')['fotki_path'].(int)$id); 
    while($file=readdir($dir)){ 
     if((strlen($file)>3)&&(substr($file,-3)=='jpg')){ 
      array_push($files,(int)$id.'/'.$file); 
      // 
      } 
    } 
    closedir($dir); 
    return $files; 


}); 
$twig->addFunction($function); 

$function = new Twig_Function('fotkalink', function ($path) use ($container) { 
    $tab=explode('/',$path); 
    return 'mediaimage/'.$tab[0].'-'.$tab[1]; 
}); 
$twig->addFunction($function); 

Декларация зрения в контейнере:

$container['view'] = function ($c) { 
    $a=[]; 
    if($c['settings']['env']=='prod') 
     $a=[ 'cache' => __DIR__.'/../cache']; 
    $view = new \Slim\Views\Twig(__DIR__.'/../templates', $a); 
    $basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/'); 
    $view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath)); 

    return $view; 
}; 

ответ

9

Вы должны использовать в Twig_SimpleFunction, которая простирается от Twig_Function как вы не можете создать экземпляр абстрактного класса.

$function = new Twig_SimpleFunction('fotkalink', function ($path) use ($container) { 
    $tab=explode('/',$path); 
    return 'mediaimage/'.$tab[0].'-'.$tab[1]; 
}); 
$twig->addFunction($function); 
+0

ehhh sure - вы на 100% прав. Я не знаю, почему я этого не видел:/ –

+1

Ну, документы используют Twig_Function в примерах, когда вы его просматриваете. Поэтому я действительно счастлив, что этот вопрос существует. – Tschallacka