«Действительно» изменение версии php в PhpStorm (не в настройках)

Я создал проект 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?

вы даже установили php 7.1?

LBA 18.04.2018 13:14

1) Пожалуйста, предоставьте скриншоты того, что вы сделали в PhpStorm 2) Покажите скриншоты с сообщениями об ошибках (и что и как вы делаете, чтобы их получить). Это поможет разобраться в вашей ситуации. P.S. Обратите внимание, что любые изменения «языка / версии PHP», внесенные в настройки PhpStorm, влияют только на PhpStorm.

LazyOne 18.04.2018 13:18

Что такое "ошибка совместимости"?

Nico Haase 18.04.2018 14:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
1 625
5

Ответы 5

Вам следует установить PHP 7.1, если вы используете PhpUnit 7.1.

Измените эту строку

"php": ">=5.5.9"

К

"php": "^7.1"

После этого выполните композитор обновление

Или отключите «Синхронизировать настройки IDE с composer.json» в Настройки / Предпочтения | Языки и фреймворки | PHP | Композитор

Dmitrii 18.04.2018 13:58

Я сделал это изменение, но при выполнении обновления композитора я получаю: «Ваши требования не могут быть решены для устанавливаемого набора пакетов. Проблема 1. Для этого пакета требуется php ^ 7.1, но ваша версия PHP <5.6; пакет переопределен через config.platform <актуально: 7.1.11 >> не удовлетворяет этому требованию "

Jacke Dow 18.04.2018 14:51

композитор не устанавливает php, вы должны сделать это сами

Pavel Alazankin 18.04.2018 14:56

Кажется, мне удалось это исправить, но вместо этого я получаю новую ошибку (см. Правка)

Jacke Dow 18.04.2018 15:16

Этот параметр require не влияет на то, какой механизм PHP используется. Менять его бесполезно.

Sven 23.04.2018 23:22

Вы должны сначала установить 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 прошла нормально.

Sven 23.04.2018 23:21

У вас неправильный синтаксис для рендеринга:

$this->render(...);

Вы должны указать шаблон или вызвать пользовательскую функцию Twig

https://symfony.com/doc/current/templating/embedding_controllers.html

Что-то вроде того :

return $this->render('folder/exemple.html.twig');

Я думаю, он это знает ... Он просто поставил "...", чтобы не указывать местоположение шаблона ...

Ricard Espinàs Llovet 18.04.2018 17:44

@ RicardEspinàsLlovet, нет, лол. Он просто скопировал это из документов - symfony.com/doc/current/email.html

Eugene Ruban 18.04.2018 20:02

Возможно, вы используете неправильную библиотеку? Я просто заглянул в свои контроллеры и класс AnyController расширяет Controller. Этот «Контроллер» происходит из строки «use Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;»

Попробуйте изменить свой:

используйте Symfony \ Component \ HttpKernel \ Tests \ Controller;

для:

используйте Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;

В PHPStorm в разделе «Настройки» - «Языки и рамки» - «PHP» у вас есть два раскрывающихся списка:

  • «Уровень языка PHP»
  • «Интерпретатор CLI»

Изменение первого не обязательно изменит второе. Но интерпретатор CLI - это версия PHP, которая используется для Composer и выполнения тестов. Если у вас есть PHP 5.6, Composer не будет должным образом обновлять зависимости, и тесты завершатся ошибкой, потому что синтаксис PHP 7.1 не может быть выполнен PHP 5.6.

Установите PHP 7.1, затем добавьте интерпретатор CLI (три точки в конце раскрывающегося списка).

Подсказка: у вас может быть установлено несколько версий PHP в PHPStorm, если вы знаете, как устанавливать их в разные каталоги. Это просто в Windows (вы просто загружаете версию и разархивируете, а затем указываете PHPStorm на php.exe внутри), а в Linux может быть сложнее.

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