В Joomla постепенно, хоть порой и непоследовательно, убирают старое API, доставшееся в наследство от CMS и заменяют его на API от Joomla Framework. При этом порой не обходится без потерь. Многие классы и методы ядра годами имеют статус deprecated, многим имеется альтернатива.
Такими классами являются классы для работы с файловой системой сервера Joomla\CMS\Filesystem. Они перемещены в плагин обратной совместимости Joomla 6 и могут ещё работать. Но лучше постепенно переходить на новые методы, а в новых расширениях использовать их сразу.
Одним из "пострадавших" методов стал File::append(), который добавлял содержимое в конец файла. Это обёртка для file_put_contents() с разными проверками, использованием потоков, если надо и т.д. Заменой для этого метода станет File::write() с флагом appendToFile.
Параметры метода
string $file– Абсолютный путь к файлуstring $buffer– Содержимоеbool $useStreams false– Использовать потокиbool $appendToFile false– дописывать ли в конец или перезаписывать файл
<?php
use Joomla\Filesystem\Filesystem;
$absoluteFilePath = JPATH_SITE . '/dir/file.txt';
$content = 'Содержимое файла';
// appentToFile - 4-й аргумент
File::write($absoluteFilePath, $content, false, true);
Либо с PHP 8.0 можно использовать именованные аргументы, и тогда не важен их порядок и наличие необязательных.
<?php
use Joomla\Filesystem\Filesystem;
$absoluteFilePath = JPATH_SITE . '/dir/file.txt';
$content = 'Содержимое файла';
//Именованные аргументы, appentToFile теперь 3-й аргумент
File::write(file: $absoluteFilePath, buffer: $content, appendToFile: true);
Класс находится в libraries/vendor/joomla/filesystem/src/File.php. Кстати, для некоторых удалённых методов теперь нужно использовать нативные функции php:
- вместо
Folder::exists()➡️is_dir() - вместо
File::exists()➡️is_file()илиfile_exists()