Я создал проект php (by cmd >composer create-project symfony/framework-standard-edition projectname), которому изначально была назначена версия PHP 5.6. Позже, в PhpStorm я решил изменить его на 7.1 через Settings / Languages & Frameworks / PHP ...
Проблема в том, что когда я установил PhpUnit (версия 7.1) в этом проекте, я получил ошибку совместимости, так как моя версия php была 5.6. Понимая, что "Способ настроек" не работает, я обратился к composer.json, когда, как мне показалось, возникла проблема:
{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle"
},
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" },
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
},
"require": {
"php": ">=5.5.9",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/orm": "^2.5",
"incenteev/composer-parameter-handler": "^2.0",
"phpunit/phpunit": "5.6.0",
"sensio/distribution-bundle": "^5.0.19",
"sensio/framework-extra-bundle": "^5.0.0",
"symfony/monolog-bundle": "^3.1.0",
"symfony/polyfill-apcu": "^1.0",
"symfony/swiftmailer-bundle": "^2.6.4",
"symfony/symfony": "3.4.*",
"twig/twig": "^1.0||^2.0"
},
"require-dev": {
"sensio/generator-bundle": "^3.0",
"symfony/phpunit-bridge": "^3.0"
},
"scripts": {
"symfony-scripts": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"post-install-cmd": [
"@symfony-scripts"
],
"post-update-cmd": [
"@symfony-scripts"
]
},
"config": {
"platform": {
"php": "5.6"
},
"sort-packages": true
},
"extra": {
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "3.4-dev"
}
}
}
У меня вопрос: какие именно строки я должен изменить и есть ли другое место / места проекта, которые нужно искать.
Редактировать:
После изменения версий php в
"config": {
"platform": {
"php": "7.1"
},
а также
"require": {
"php": "^7.1",
Я выполнил обновление композитора, и хотя на этот раз я не получаю предыдущую ошибку, вместо нее появляется еще одна новая:
Symfony\Component\Debug\Exception\FatalThrowableError: Parse error: syntax error, unexpected ')' in (file route) on line 25
Но я не понимаю, почему строка с кодом return $this->render(...); неверна, поскольку мой php файл основан на официальном руководстве https://symfony.com/doc/3.4/email.html
<?php
namespace AppBundle\Controller;
use Symfony\Component\HttpKernel\Tests\Controller;
class SendCustomerEmailController extends Controller
{
public function indexAction($name, $email, $originEmail, \Swift_Mailer $mailer)
{
$message = (new \Swift_Message('Pago reserva'))
->setFrom($originEmail)
->setTo($email)
->setBody(
$this->renderView(
'emails/email-template.html.twig',
array('name' => $name)
),
'text/html'
);
$mailer->send($message);
return $this->render(...);
}
}
Если синтаксис неверен, почему меня не предупредил PhpStorm?
1) Пожалуйста, предоставьте скриншоты того, что вы сделали в PhpStorm 2) Покажите скриншоты с сообщениями об ошибках (и что и как вы делаете, чтобы их получить). Это поможет разобраться в вашей ситуации. P.S. Обратите внимание, что любые изменения «языка / версии PHP», внесенные в настройки PhpStorm, влияют только на PhpStorm.
Что такое "ошибка совместимости"?






Вам следует установить PHP 7.1, если вы используете PhpUnit 7.1.
Измените эту строку
"php": ">=5.5.9"
К
"php": "^7.1"
После этого выполните композитор обновление
Или отключите «Синхронизировать настройки IDE с composer.json» в Настройки / Предпочтения | Языки и фреймворки | PHP | Композитор
Я сделал это изменение, но при выполнении обновления композитора я получаю: «Ваши требования не могут быть решены для устанавливаемого набора пакетов. Проблема 1. Для этого пакета требуется php ^ 7.1, но ваша версия PHP <5.6; пакет переопределен через config.platform <актуально: 7.1.11 >> не удовлетворяет этому требованию "
композитор не устанавливает php, вы должны сделать это сами
Кажется, мне удалось это исправить, но вместо этого я получаю новую ошибку (см. Правка)
Этот параметр require не влияет на то, какой механизм PHP используется. Менять его бесполезно.
Вы должны сначала установить php7.1 в свою систему, чтобы иметь возможность его использовать.
Для Ubuntu:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.1
Для Windows и других ОС просто погуглите (например, Как установить php в Windows).
Затем вы должны сказать PHPUnit, чтобы использовать определенную версию php, но это зависит от того, как именно вы запускаете тесты.
См. Запустить тест в phpunit с определенной версией php или же PHPUnit - для этой версии PHPUnit требуется PHP 5.6; настоятельно рекомендуется использовать последнюю версию PHP - OSX 10.11
Это приводит к правильному решению. PHPStorm имеет один или несколько исполняемых файлов PHP, определенных (в настройках) и независимо от них, позволяет выбрать уровень языка PHP для проверки синтаксиса (таким образом вы получите предупреждение, если вы используете функцию, которая не поддерживается на выбранном уровне языка PHP. ). Если вы измените уровень языка, вы не повлияете на механизм выполнения PHP. Вам необходимо установить PHP 7.1, добавить его в качестве механизма выполнения и выбрать его. Затем запустите Composer - и избавьтесь от всех принудительных настроек «платформы» - ваша первоначальная настройка Composer прошла нормально.
У вас неправильный синтаксис для рендеринга:
$this->render(...);
Вы должны указать шаблон или вызвать пользовательскую функцию Twig
https://symfony.com/doc/current/templating/embedding_controllers.html
Что-то вроде того :
return $this->render('folder/exemple.html.twig');
Я думаю, он это знает ... Он просто поставил "...", чтобы не указывать местоположение шаблона ...
@ RicardEspinàsLlovet, нет, лол. Он просто скопировал это из документов - symfony.com/doc/current/email.html
Возможно, вы используете неправильную библиотеку? Я просто заглянул в свои контроллеры и класс AnyController расширяет Controller. Этот «Контроллер» происходит из строки «use Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;»
Попробуйте изменить свой:
используйте Symfony \ Component \ HttpKernel \ Tests \ Controller;
для:
используйте Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;
В PHPStorm в разделе «Настройки» - «Языки и рамки» - «PHP» у вас есть два раскрывающихся списка:
Изменение первого не обязательно изменит второе. Но интерпретатор CLI - это версия PHP, которая используется для Composer и выполнения тестов. Если у вас есть PHP 5.6, Composer не будет должным образом обновлять зависимости, и тесты завершатся ошибкой, потому что синтаксис PHP 7.1 не может быть выполнен PHP 5.6.
Установите PHP 7.1, затем добавьте интерпретатор CLI (три точки в конце раскрывающегося списка).
Подсказка: у вас может быть установлено несколько версий PHP в PHPStorm, если вы знаете, как устанавливать их в разные каталоги. Это просто в Windows (вы просто загружаете версию и разархивируете, а затем указываете PHPStorm на php.exe внутри), а в Linux может быть сложнее.
вы даже установили php 7.1?