Недавно столкнулся с жёсткой ошибкой в Laravel-проекте, которая ломала работу перевода языков через пакет joedixon/translation. Причём ошибка была настолько запутанной, что даже техподдержка продукта не смогла внятно ответить, в чём дело.
Ошибка выглядела вот так:
Argument #2 ($key) must be passed by reference, value given
И вызывалась примерно отсюда:
oeDixon\Translation\Drivers\Translation::JoeDixon\Translation\Drivers\{closure}()
Когда возникает ошибка
Ошибка появилась, когда я попытался зайти в раздел “Переводы языков” (translations.index) в админке Laravel-проекта. Всё остальное работало как надо, а вот именно этот метод вызывал сбой.
Виновник — библиотека joedixon/translation
После недолгого анализа я понял, что ошибка находится не в моём контроллере, а внутри пакета joedixon/translation, а именно — в методе filterTranslationsFor().
Там внутри используется функция array_walk() или filter(), и в переданной функции ошибка: один из аргументов (второй — $key) ожидается по ссылке (&$key), но на самом деле передаётся по значению, как это и должно быть.
❗ В PHP нельзя передавать аргументы по значению в функцию, где они ожидаются по ссылке — это вызывает фатальную ошибку.
Как я решил проблему
Нашёл файл с ошибкой:
vendor/joedixon/translation/src/Drivers/Translation.php
Нашёл проблемный фрагмент кода:
$collection->filter(function($value, &$key) {
…
});
Заменил на корректный вариант:
$collection->filter(function($value, $key) {
…
});
Сохранил, очистил кэш и протестировал
php artisan config:clear
php artisan cache:clear
php artisan view:clear
Всё заработало!
Альтернатива — обновление пакета
Проблема, скорее всего, исправлена в новой версии joedixon/translation. Поэтому советую попробовать просто выполнить:
composer update joedixon/translation
Если вы используете старую версию пакета, это тоже может решить проблему без ручной правки.
Вывод
Laravel — мощный инструмент, но даже в популярных пакетах могут быть ошибки. Если у вас возникает ошибка с “must be passed by reference”, почти всегда это означает, что где-то в замыкании (function () {}) кто-то ожидает аргумент по ссылке (&$key), но ему передают обычное значение.
Если бы кто-то написал об этом раньше — я бы сэкономил кучу времени. Поэтому делюсь опытом — пусть поможет и вам.
Если помогло — делитесь статьёй, чтобы другие не мучились 💪








