Получить версию с composer.json [Symfony]

Интересно, есть ли способ получить версию composer.json с контроллера с Symfony. Мой composer.json выглядит так:

{
    "name": "myProject",
    "version": "0.0.0",
    "description": "myProject description",
    "license": "AGPL-3.0",
    "type": "project",
    "require": {
        "php": "^7.1.3",
        ...
    }
}

Я не могу найти упоминания об этом.

PS: Я использую Symfony 4.

что ты уже испробовал? Где ты застрял? Обычно это обычный JSON-файл, который можно анализировать, как и любой другой.

Nico Haase 11.12.2020 20:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
3
1
1 528
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете сделать что-то вроде этого:

$filename = $this->getParameter('%app.kernel_dir%') . '/../composer.json';
$composerData = json_decode(file_get_contents($filename), true);

$version = $composerData['version'];

Затем переменная должна содержать значение 0.0.0 из вашего примера.

Это предполагает, что ваш контроллер расширяет базовый контроллер для доступа к параметру %app.kernel_dir%. Если нет, вы также можете использовать относительный путь от вашего контроллера или что-то еще, чтобы определить местоположение composer.json

Ответ принят как подходящий

Вы можете использовать библиотеку PackageVersions и ее родственник PrettyPackageVersions.

Они предоставляют единый класс API для получения текущей установленной версии ваших зависимостей Composer, например:

use PackageVersions\Versions;
use Jean85\PrettyVersions;

// Will output "1.0.0@0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
echo Versions::getVersion('myvendor/mypackage');

// Will output "1.0.0"
echo (string) PrettyVersions::getVersion('myvendor/mypackage');

Без пакетов с Composer вы можете использовать $version = \Composer\InstalledVersions::getPrettyVersion('package/package-name')

Обращаясь к ответу Салам, вы также можете получить версию собственного проекта (названную root package в мире композиторов), хранящуюся в composer.json, с помощью:

$version = \Composer\InstalledVersions::getRootPackage()['version'];

или для более красивой печати:

$version = \Composer\InstalledVersions::getRootPackage()['pretty_version'];

Другие вопросы по теме