2017-02-20 11 views
2

PHP Slim(最新版)には単純なアプリケーションがありますが、データベースからデータを取得してtwigテンプレートで表示するシンプルなWebサイトです。何もない。 私は小枝にカスタム関数を追加しようとしない限り、すべてが完璧に動作します。私はlaragoonが同じPHPのバージョンと本番サーバー上で、正常に動作しますローカルホスト上で(一部のサーバー上で小枝するカスタム機能を追加するとSlimPHP - twig(関数)を拡張する際に奇妙なエラーが発生する

はない私はこのエラーを取得:

致命的なエラー:抽象クラスTwig_Functionをインスタンス化することはできませんエラーが新しいTwig_Functionに接続されていますが、正直なところ、私は...ここに任意の抽象クラスが表示されない、とlocalhostのLaragonにそれはだ - ...以下の4

ライン上twig.phpは私twig.phpです正常に動作します。

誰もこの問題を解決する方法を知っていますか?コンテナ内のビューの

<?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_Functionに延びTwig_SimpleFunctionを利用する必要があります。

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

ehhh確かに - あなたは100%正しいです。なぜ私はこれを見ていないのかわかりません:/ –

+1

文書は、あなたがそれを見ているとき、例ではTwig_Functionを利用しています。だから私はこの質問が本当にうれしいです。 – Tschallacka

関連する問題