Репост из: WebTolkRu
👩💻 Совет по Joomla: замена File::append() в Joomla 6.
В 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 – дописывать ли в конец или перезаписывать файл
use Joomla\Filesystem\Filesystem;
$absoluteFilePath = JPATH_SITE . '/dir/file.txt';
$content = 'Содержимое файла';
// appentToFile - 4-й аргумент
File::write($absoluteFilePath, $content, false, true);
Либо с PHP 8.0 можно использовать именованные аргументы, и тогда не важен их порядок и наличие необязательных.
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()
@webtolkru
#joomla #php #webdev #разработка #development
В 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 – дописывать ли в конец или перезаписывать файл
use Joomla\Filesystem\Filesystem;
$absoluteFilePath = JPATH_SITE . '/dir/file.txt';
$content = 'Содержимое файла';
// appentToFile - 4-й аргумент
File::write($absoluteFilePath, $content, false, true);
Либо с PHP 8.0 можно использовать именованные аргументы, и тогда не важен их порядок и наличие необязательных.
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()
@webtolkru
#joomla #php #webdev #разработка #development