Переустановить laravel

I was trying to install the latest Laravel version (8.x) using the command I found on the documentation composer create-project laravel/laravel example-app but it keeps download version 5.5.50, I cleared the cache for the composer and installed it again but still doesn’t download version 8.x, what is the problem?

asked Dec 12, 2020 at 11:14

You can simply specify a desired version within the command.

composer create-project laravel/laravel example-app «8.5.*»

answered Dec 12, 2020 at 11:16

4 gold badges28 silver badges40 bronze badges

I noticed this happened to me. ( It downloaded 7 when I wanted 8)

The cause was it was automatically downloading the latest that my system could support. As I had an older version of php (7.2) it was automatically downloading an old version of laravel. After updating it allowed me to download latest.

Check the other requirements of laravel too and check that there isn’t also something else holding it back

answered Dec 12, 2020 at 11:17

answered Jun 29, 2021 at 17:10

answered Jan 20, 2022 at 4:35

composer.json (Laravel 8):

Мы постарались задокументировать все возможные критические изменения. Поскольку некоторые из них находятся в малоизвестных частях фреймворка, только часть этих изменений может повлиять на ваше приложение. Приблизительное время обновления: 15 минут.

Содержание
  1. Требуется PHP 7
  2. Обновление зависимостей
  3. Коллекции
  4. База данных
  5. Eloquent
  6. Интерфейс Castable
  7. События инкремента/декремента
  8. Фреймворк
  9. Свойства $app в Manager
  10. Хелпер elixir
  11. Почта
  12. Пагинация
  13. Очередь
  14. Свойство timeoutAt
  15. Методы allOnQueue и allOnConnection
  16. Поддержка Пакетирования в таблице невыполненных задач
  17. Маршрутизация
  18. Планировщик
  19. Сессии
  20. Тестирование
  21. Валидация
  22. Разное
  23. Требуется PHP 8
  24. PHP Типы возвращаемого значения
  25. Зависимости Composer
  26. Контракт Application
  27. Метод ignore обработчика исключений
  28. Blade — Ленивые коллекции и переменная $loop
  29. Collections — Контракт Enumerable
  30. Контракт Container
  31. Контракт ContextualBindingBuilder
  32. Postgres конфигурация «Schema»
  33. Кастомные касты и null
  34. Методы Belongs To Many firstOrNew, firstOrCreate и updateOrCreate
  35. Метод touch
  36. Контракт Encrypter
  37. Переменная окружения FILESYSTEM_DRIVER
  38. Flysystem 3
  39. Требования
  40. Перезапись существующих файлов
  41. Чтение несуществующих файлов
  42. Удаление несуществующих файлов
  43. Кэшированные адаптеры
  44. Кастомные файловые системы
  45. Хелперы
  46. Str
  47. Методы when/unless
  48. HTTP Client
  49. Symfony Mailer
  50. Обновленные типы возвращаемых значений
  51. Переименованные «Swift» методы
  52. Прокси-методы IlluminateMailMessage
  53. Генерируемые идентификаторы сообщений
  54. Принудительные переподключения
  55. Параметры SMTP-stream
  56. SMTP auth_mode
  57. Неудавшиеся отправления
  58. Пакеты
  59. Метод failed провайдера Failed Job
  60. Сессия
  61. Доверенные прокси
  62. Правило password
  63. Непроверенные ключи массива

Требуется PHP 7

Новая минимальная версия PHP теперь 7.3.0.

Обновление зависимостей

Следующие наши пакеты получили новую мажорную версию для поддержки Laravel 8. По возможности прочтите соответствующие руководства по их обновлению:

Laravel инсталлер обновлён и теперь поддерживает composer create-project и Laravel Jetstream. Инсталлер версии ниже чем 4.0 перестанет работать после октября 2020 года. Необходимо как можно скорее обновить его до версии ^4.0.

Не забудьте также проверить все сторонние пакеты, используемые в вашем приложении, и убедитесь, что они поддерживают Laravel 8.

Коллекции

Чтобы соответствовать типичному поведению PHP, метод offsetExists из IlluminateSupportCollection был обновлён и теперь использует isset вместо array_key_exists. Это может привести к изменению поведения при работе с элементами коллекции, имеющими значение null:

База данных

Сидеры и фабрики теперь используют пространства имён. Добавьте пространство имен Database/Factories в классы фабрик и Database/Seeders в классы сидеров.

Предыдущий каталог database/seeds нужно переименовать в database/seeders.

В файле composer.json из секции autoload удалите блок classmap и добавьте новые классы:

Eloquent

Фабрики моделей полностью переписаны для поддержки классов и несовместимы с фабриками Laravel 7. Однако, чтобы упростить процесс обновления, был создан пакет laravel/legacy-factories, чтобы вы могли продолжать использовать ваши уже существующие фабрики. Вы можете установить этот пакет через Composer:

composer require laravel/legacy-factories

Интерфейс Castable

Метод castUsing интерфейса Castable был обновлен и теперь он принимает массив аргументов. Если вы используете этот интерфейс, то вам следует обновить свой код:

public static function castUsing(array $arguments);

События инкремента/декремента

При выполнении методов инкремента или декремента на экземплярах Eloquent-модели теперь будут отправляться соответствующие события модели «update» и «save».

Метод listen контракта IlluminateContractsEventsDispatcher был обновлен и теперь параметр $listener необязателен. Это изменение было внесено для поддержки автоматического определения обрабатываемых типов событий через рефлексию. Если вы реализуете этот интерфейс вручную, то вам следует соответствующим образом обновить свою реализацию:

public function listen($events, $listener = null);

Фреймворк

Режим обслуживания улучшен. Теперь поддерживается возможность заранее отрендерить шаблон режима обслуживания и конечные пользователи не столкнутся с возможными ошибками. Но для поддержки этого необходимо в ваш файл public/index.php добавить пару строк. Их следует разместить сразу под определением константы LARAVEL_START:

Свойства $app в Manager

Удалено устаревшее свойство $app класса IlluminateSupportManager. Если вы его использовали, то вместо этого работайте со свойством $container.

Хелпер elixir

Удалён устаревший хелпер elixir. Приложениям, всё ещё использующим этот метод, рекомендуется перейти на Laravel Mix.

Почта

Удалён устаревший метод sendNow. Используйте вместо него метод send.

Пагинация

Пагинатор по умолчанию теперь использует фреймворк Tailwind CSS. Чтобы продолжать использовать Bootstrap, необходимо добавить вызов следующего метода в метод boot в AppServiceProvider:

Читайте также:  13.7.1.3 CREATE USER Statement

Очередь

Для согласования с другими функциями Laravel, метод retryAfter и свойство retryAfter задач в очереди, почтовиков, уведомлений и слушателей были переименованы в backoff. Вам следует обновить названия этого метода/свойства в соответствующих классах вашего приложения.

Свойство timeoutAt

Свойство timeoutAt задач в очереди, уведомлений и слушателей было переименовано в retryUntil. Вам следует обновить название этого свойства в соответствующих классах вашего приложения.

Методы allOnQueue и allOnConnection

Методы allOnQueue() и allOnConnection(), используемые для цепочек задач, были удалены. Используйте вместо этого методы onQueue() и onConnection():

Поддержка Пакетирования в таблице невыполненных задач

Если вы планируете использовать функцию пакетной обработки задач, то необходимо обновить таблицу failed_jobs. Во-первых, в неё нужно добавить новое поле uuid:

Затем параметр failed.driver в конфигурационном файле queue должен быть обновлён до database-uuids.

Маршрутизация

В предыдущих версиях Laravel класс RouteServiceProvider содержал свойство $namespace имевшее значение AppHttpControllers. Оно использовалось для автоматического задания префикса маршрута контроллеров, например, при вызове хелпера action.

В Laravel 8 это свойство по дефолту равно null. Это позволяет маршрутам вашего контроллера использовать стандартный синтаксис PHP, который позволяет во многих IDE переходить сразу к классу контроллера.

В большинстве случаев это не повлияет на обновляемые приложения, так как в вашем RouteServiceProvider $namespace будет установлен по старому. Однако, если вы обновляете своё приложение через создание нового проекта, то можете столкнуться с этой проблемой.

Если вы хотите продолжить использование автоматического префикса, то просто задайте $namespace в вашем RouteServiceProvider и обновите регистрацию маршрутов в методе boot для его использования:

Планировщик

Зависимость dragonmantank/cron-expression от была обновлена ​​с 2.x до 3.x. Это не должно вызывать каких-либо критических изменений в вашем приложении, если вы не взаимодействуете с библиотекой напрямую. Если же работаете напрямую, то ознакомьтесь с изменениями в ней.

Сессии

Контракт IlluminateContractsSessionSession получил новый метод pull. Если вы реализуете этот контракт вручную, то вам следует обновить свой код:

Тестирование

Теперь метод assertExactJson требует, чтобы числовые ключи сравниваемых массивов совпадали и располагались в одном порядке. Если же вы хотите сравнить JSON с массивом, не требуя, чтобы массивы с числовыми ключами имели одинаковый порядок, вы можете использовать метод assertSimilarJson.

Валидация

Правила unique и exists теперь будут соблюдать название указанного соединения (доступное через модельный метод getConnectionName) Eloquent-моделей при выполнении запросов.

Разное

update 11.09.2020: Добавлены разделы Маршрутизация, База данных. Обновлен раздел Очередь.

Задать вопросы по урокам можно на нашем форуме.

Мы постарались задокументировать все возможные критические изменения. Поскольку некоторые из них находятся в малоизвестных частях фреймворка, только часть этих изменений может повлиять на ваше приложение. Приблизительное время обновления: 30 минут.

Требуется PHP 8

Минимальная поддерживаемая версия PHP Laravel теперь 8.0.2.

PHP Типы возвращаемого значения

Язык начинает требовать определения типа возвращаемого значения для методов, таких как offsetGet, offsetSet, и т.п. По этой причине Laravel 9 реализовал эти типы в своей кодовой базе. Как правило, это не должно влиять на написанный пользователем код, однако, если вы переопределяете один из этих методов, расширяя базовые классы Laravel, то вам нужно будет добавить типы возвращаемых значений в код вашего приложения или пакета:

Кроме того, типа возвращаемых значений были добавлены в методы, реализующие PHP SessionHandlerInterface. Опять же, маловероятно, что это изменение повлияет на ваше приложение или пакет:

Зависимости Composer

Вы должны обновить следующие зависимости в файле composer.json вашего приложения:

Кроме того, замените facade/ignition на «spatie/laravel-ignition»: «^1.0» в этом же файле.

Не забудьте также проверить все сторонние пакеты, используемые в вашем приложении, и убедитесь, что они поддерживают Laravel 9.

Контракт Application

Метод storagePath интерфейса IlluminateContractsFoundationApplication был обновлен для использования аргумента $path. Если вы реализуете этот интерфейс, вы должны соответствующим образом обновить свою реализацию:

public function storagePath($path = »);

Метод ignore обработчика исключений

Метод ignore теперь public вместо protected. Этот метод не включен в дефолтный каркас приложения. Однако, если вы задавали этот метод вручную, то должны обновить его видимость до public:

public function ignore(string $class);

Blade — Ленивые коллекции и переменная $loop

При итерации экземпляра LazyCollection в Blade-шаблоне переменная $loop больше недоступна, так как доступ к этой переменной приводит к полной загрузке LazyCollection в память, что делает использование ленивых коллекций бессмысленным в данном сценарии.

Collections — Контракт Enumerable

Контракт IlluminateSupportEnumerable теперь определяет метод sole. Если вы реализуете этот интерфейс вручную, то обновите свою реализацию, добавив новый метод:

public function sole($key = null, $operator = null, $value = null);

Контракт Container

Контракт IlluminateContractsContainerContainer получил два новых метода: scoped и scopedIf. Если вы реализуете этот контракт вручную, то обновите свою реализацию, добавив их.

Контракт ContextualBindingBuilder

Контракт IlluminateContractsContainerContextualBindingBuilder получил новый метод giveConfig. Если вы реализуете этот контракт вручную, то обновите свою реализацию, добавив его.

public function giveConfig($key, $default = null);

Postgres конфигурация «Schema»

Параметр конфигурации schema, используемый для настройки путей поиска соединений Postgres в файле конфигурации config/database.php вашего приложения, должен быть переименован в search_path.

Читайте также:  Vnc порт

Кастомные касты и null

В предыдущих версиях Laravel метод set кастомных кастов не вызывался, если для атрибута приведения было установлено значение null. Однако такое поведение не соответствовало документации Laravel. В Laravel 9.x метод set класса каста будет вызываться с null в аргументе $value. Поэтому вы должны убедиться, что ваши касты смогут правильно отработать этот сценарий:

Методы Belongs To Many firstOrNew, firstOrCreate и updateOrCreate

Методы отношения belongsToMany: firstOrNew, firstOrCreate и updateOrCreate принимают массив атрибутов в качестве первого аргумента. В предыдущих версиях Laravel этот массив сравнивался со «сводной»/промежуточной таблицей для существующих записей.

Однако такое поведение было неожидаемым и, как правило, нежелательным. Вместо этого эти методы теперь сравнивают массив атрибутов с таблицей связанной модели:

Кроме того, метод firstOrCreate теперь принимает массив $values в качестве второго аргумента. Этот массив будет объединен с первым аргументом метода ( $attributes) при создании связанной модели, если она еще не существует. Это изменение делает этот метод совместимым с методом firstOrCreate, предлагаемыми другими типами отношений:

Метод touch

Теперь метод touch принимает атрибут. Если вы ранее переопределяли этот метод, то вам следует обновить его, добавив новый аргумент:

public function touch($attribute = null);

Контракт Encrypter

В контракт IlluminateContractsEncryptionEncrypter добавлен метод getKey. Если вы реализуете этот интерфейс вручную, то обновить свою реализацию:

public function getKey();

Метод getFacadeAccessor всегда должен возвращать ключ привязки контейнера. В предыдущих версиях Laravel этот метод мог возвращать экземпляр объекта, однако такое поведение больше не поддерживается. Если вы создавали свои собственные фасады, то убедитесь, что этот метод возвращает строку привязки контейнера:

Переменная окружения FILESYSTEM_DRIVER

Переменная FILESYSTEM_DRIVER была переименована в FILESYSTEM_DISK для более точного отражения ее назначения. Это изменение затрагивает только каркас приложения, однако вы можете обновить переменные окружения своего приложения, если хотите.

Flysystem 3

Laravel 9 переходит с Flysystem 1.x на 3.x. Под капотом Flysystem поддерживает все методы работы с файлами, предоставляемые фасадом Storage. В связи с этим в вашем приложении могут потребоваться некоторые изменения; однако мы постарались сделать этот переход максимально плавным.

Требования

Перед использованием драйверов S3 или SFTP необходимо установить соответствующий пакет через Composer:

Amazon S3
composer require —with-all-dependencies league/flysystem-aws-s3-v3 «^3.0»
SFTP
composer require league/flysystem-sftp-v3 «^3.0»

Перезапись существующих файлов

Операции записи put, write, writeStream теперь перезаписывают существующие файлы по умолчанию. Если вы не хотите перезаписывать существующие файлы, то вам следует вручную проверить существование файла перед выполнением операции записи.

Чтение несуществующих файлов

Попытка чтения из несуществующего файла теперь возвращает null. В предыдущих версиях Laravel выбрасывалось исключение IlluminateContractsFilesystemFileNotFoundException.

Удаление несуществующих файлов

Попытка применения метода delete к несуществующему файлу теперь возвращает true.

Кэшированные адаптеры

Flysystem больше не поддерживает «cached adapters». Поэтому они были удалены из Laravel, и любая соответствующая конфигурация (например, ключ cache в конфигурации диска) может быть удалена.

Кастомные файловые системы

Небольшие изменения были внесены в шаги, необходимые для регистрации кастомных драйверов файловой системы. Если вы создавали свои собственные драйверы или использовали пакеты, создающие таковые, то необходимо обновить свой код и зависимости. Например, в Laravel 8.x кастомный драйвер файловой системы может быть зарегистрирован следующим образом:

А в Laravel 9.x колбэк метода Storage::extend должен возвращать экземпляр IlluminateFilesystemFilesystemAdapter напрямую:

Хелперы

Раньше хелпер data_get можно было использовать для извлечения вложенных данных только из массивов и экземпляров Collection. А теперь этот хелпер может извлекать вложенные данные из всех итерируемых объектов.

Str

Laravel 9 теперь включает глобальныйх хелпер str. Если вы задаете глобальный хелпер str в своем приложении, то вы должны переименовать или удалить его, чтобы он не конфликтовал с основным Laravel-хелпером.

Методы when/unless

Как вы, возможно, знаете, методы when и unless предлагаются различными классами по всему фреймворку. Эти методы можно использовать для условного выполнения действия, если логическое значение первого аргумента метода оценивается как true или false:

Таким образом, в предыдущих версиях Laravel передача замыкания методам when или unless означала, что условная операция всегда будет выполняться, поскольку нечеткое сравнение с объектом замыкания (или любым другим объектом) всегда оценивается как true. Это часто приводило к неожиданным результатам, поскольку разработчики ожидали, что результат замыкания будет использоваться в качестве логического значения, определяющего, выполняется ли условное действие.

В Laravel 9 любые замыкания, переданные методам when или unless, будут выполнены, а значение, возвращаемое замыканием, будет считаться логическим значением, используемым методами when и unless:

HTTP Client

HTTP-клиент теперь имеет дефолтный тайм-аут в 30 секунд. Другими словами, если сервер не отвечает в течение 30 секунд, то будет выброшено исключение. Раньше дефолтного таймаута не было, из-за чего запросы иногда подвисали на неопределенное время.

Если вы хотите указать более длительный тайм-аут для запроса, то можете сделать это с помощью метода timeout:

Symfony Mailer

Одно из самых больших изменений в Laravel 9 это переход от SwiftMailer, который не поддерживается с декабря 2021 года, к Symfony Mailer. Однако мы постарались сделать этот переход как можно более плавным для ваших приложений. Внимательно ознакомьтесь со списком изменений ниже, чтобы убедиться, что ваше приложение полностью совместимо.

Читайте также:  Выбор правильной панели управления для удобного хостинга веб-сайтов

Пакет aws/aws-sdk-php больше не потребуется при использовании Amazon SES, и его можно удалить, если он не требуется для других частей вашего приложения. Вместо этого вашему приложению нужен пакет symfony/amazon-mailer:

composer require symfony/amazon-mailer

Чтобы продолжить использование Mailgun, вашему приложению потребуется пакет symfony/mailgun-mailer:

composer require symfony/mailgun-mailer

Пакет wildbit/swiftmailer-postmark должен быть удален из вашего приложения. Вместо этого вашему приложению нужен пакет symfony/postmark-mailer:

composer require symfony/postmark-mailer

Обновленные типы возвращаемых значений

Методы send, html, text и plain больше не возвращают количество получателей. Вместо этого возвращается экземпляр IlluminateMailSentMessage. Этот объект содержит экземпляр SymfonyComponentMailerSentMessage, доступный через метод getSymfonySentMessage.

Переименованные «Swift» методы

Различные методы, связанные со SwiftMailer, некоторые из которых не были задокументированы, сейчас переименованы в их аналоги Symfony Mailer. Например, метод withSwiftMessage переименован в withSymfonyMessage:

Пожалуйста, внимательно изучите документацию Symfony Mailer для всех возможных взаимодействий с объектом SymfonyComponentMimeEmail.

Нижерасположенный список содержит более подробный обзор переименованных методов. Многие из них являются низкоуровневыми, используемыми для прямого взаимодействия со SwiftMailer/Symfony Mailer, поэтому могут не использоваться в большинстве приложений Laravel:

Прокси-методы IlluminateMailMessage

Обычно отсутствующие методы в IlluminateMailMessage проксировались базовому Swift_Message. Но теперь, вместо этого, они будут проксироваться в SymfonyComponentMimeEmail. Таким образом, любой код, который ранее полагался на SwiftMailer, должен быть обновлен до соответствующих аналогов Symfony Mailer.

Опять же, многие приложения могут и не взаимодействовать с этими методами, поскольку они не описаны в документации Laravel:

Генерируемые идентификаторы сообщений

SwiftMailer предлагал возможность задать собственный домен для включения в сгенерированные идентификаторы сообщений с помощью параметра конфигурации mime.idgenerator.idright. Но это не поддерживается Symfony Mailer. Вместо этого он автоматически генерирует идентификатор сообщения на основе отправителя.

Принудительные переподключения

Теперь больше невозможно принудительно переподключиться к транспорту (например, когда мейлер работает через демона). Вместо этого Symfony Mailer попытается автоматически переподключиться к транспорту и выбросит исключение, если это не удастся.

Параметры SMTP-stream

Определение параметров потока для SMTP больше не поддерживается. Вместо этого вы должны задать соответствующие параметры непосредственно в конфигурации, если они поддерживаются. Например, чтобы отключить проверку пира TLS:

Несмотря на вышеприведенный пример, не рекомендуется отключать проверку SSL, поскольку это создает возможность атак типа «man-in-the-middle».

SMTP auth_mode

Определение SMTP auth_mode в файле конфигурации mail больше не требуется. Режим аутентификации будет автоматически согласован между Symfony Mailer и SMTP-сервером.

Неудавшиеся отправления

Теперь невозможно получить список получателей, которым не получилось отправить письмо. Вместо этого, , если сообщение не будет отправлено, то выбросится исключение SymfonyComponentMailerExceptionTransportExceptionInterface. Вместо того, чтобы полагаться на получение невалидных адресов электронной почты после отправки сообщения, мы рекомендуем вам проверять их перед отправкой сообщения.

Пакеты

Зависимость Laravel от opis/closure была заменена на laravel/serializable-closure. Это не должно привести к каким-либо критическим изменениям в вашем приложении, если только вы не взаимодействуете с библиотекой opis/closure напрямую. Кроме того, были удалены классы IlluminateQueueSerializableClosureFactory и IlluminateQueueSerializableClosure, ранее объявленные устаревшими. Если вы взаимодействуете с библиотекой opis/closure напрямую или используете любой из удаленных классов, то вместо этого используйте Laravel Serializable Closure.

Метод failed провайдера Failed Job

Метод flush, заданный интерфейсом IlluminateQueueFailedFailedJobProviderInterface, теперь принимает аргумент $age, определяющий, сколько в днях должно просуществовать невыполненное задание, прежде чем оно будет сброшено командой queue:flush. Если вы реализуете вручную интерфейс FailedJobProviderInterface, то убедитесь, что ваша реализация обновлена для использования нового аргумента:

public function flush($age = null);

Сессия

Класс SymfonyComponentHttpFoundatonRequest, расширяемым Laravel-классом IlluminateHttpRequest, предлагает метод getSession для получения текущего обработчика хранилища сессии. Этот метод не задокументирован, так как большинство приложений Laravel взаимодействуют с сессией через метод session.

Ранее метод getSession возвращал экземпляр IlluminateSessionStore или null. Однако из-за того, что в релизе Symfony 6.x используется тип возвращаемого значения SymfonyComponentHttpFoundationSessionSessionInterface, теперь метод getSession корректно возвращает SessionInterface или выбрасывает исключение SymfonyComponentHttpFoundationExceptionSessionNotFoundException, если сессия недоступна.

Все вызовы метода assertDeleted должны быть заменены на assertModelMissing.

Доверенные прокси

Если вы обновляете свой проект c Laravel 8 до Laravel 9, импортируя имеющийся код в совершенно новый каркас приложения на Laravel 9, то вам может потребоваться обновить мидлвар «trusted proxy».

В файле app/Http/Middleware/TrustProxies.php обновите use FideloperProxyTrustProxies as Middleware до use IlluminateHttpMiddlewareTrustProxies as Middleware.

Метод validated теперь принимает аргументы $key и $default. Если вы вручную переопределяли этот метод, то вам следует обновить его:

public function validated($key = null, $default = null)

Правило password

Правило password, проверяющее соответствие введенного пароля текущему, было переименовано в current_password.

Непроверенные ключи массива

В предыдущих версиях Laravel приходилось вручную указывать валидатору исключать непроверенные ключи массива из проверенных данных, особенно в сочетании с правилом array, в котором не указан список разрешенных ключей.

В Laravel 9 непроверенные ключи теперь всегда исключаются из проверенных данных, даже если в правиле array не указаны разрешенные ключи. Как правило, такое поведение и является наиболее ожидаемым. Предыдущий метод excludeUnvalidatedArrayKeys был добавлен в Laravel 8 только как временная мера для сохранения обратной совместимости.

Оцените статью
Хостинги