PHPのviewテンプレートであるTwigを使おうとしたとき、以下のエラーが出ることがあります。
Argument 1 passed to Twig_Filter::__construct() must be an instance of string, string given,
called in /path/to/vendor/twig/twig/lib/Twig/Extension/Core.php on line 139
and defined in /path/to/vendor/twig/twig/lib/Twig/Filter.php on line 35
これは、使用しているtwigのバージョンがPHPのバージョン7.0以降を要求しているにもかからわらず、実行環境のPHPが7.xではないためです。
バージョンの確認方法
composer経由でtwigをインストールしている場合は、ファイルvendor/twig/twig/composer.jsonをエディタで開きます。
requireの定義を見るとtwigパッケージが要求するPHPのバージョンを確認できます。
"require": {
"php": "^7.0",
"symfony/polyfill-mbstring": "~1.0"
},
また、PHPのバージョンの方は、コマンドラインからphp -version
コマンドを実行すれば確認できます。
$ php -version
PHP 5.5.35 (cli) (built: Jun 7 2017 17:38:06)
レンタルサーバなどでSSHログインできない場合もあるかと思います。
このような場合は、以下の2行だけを含むファイルをversion.phpなど適当なファイル名でサーバにアップし、アップしたファイルをブラウザからアクセスすることでもPHPのバージョンを確認できます。
<?php
echo phpversion();
解決方法
twigのバージョン1.xはPHP5.3.3以降で実行可能なため、以下のようにcomposerでtwigのバージョンを指定してインストールすればよいです。
composer require twig/twig:~1.0
また、開発環境はPHP7.xで、実行環境がPHP5.xなどcomposer updateする環境と、実行環境のバージョンが異なる時もあります。
この場合は、プロジェクトのcomposer.jsonへ以下のようにプログラムが実行する環境のPHPバージョンを明示的に指定することも可能です。
{
...
"config": {
"platform": {
"php": "5.6.21"
}
},
}
こちらもおススメ