{{TOC}} {{DOCVER 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Обновление на 4.2 с 4.1 == === PHP 5.4+ === Laravel 4.2 требует PHP 5.4.0 или выше. === Настройки шифрования === Добавьте новый параметр %%(t)cipher%% в свой файл конфигурации %%(t)app/config/app.php%%. Значение этого параметра должно быть %%(t)MCRYPT_RIJNDAEL_256%%. %%(conf) cipher => MCRYPT_RIJNDAEL_256 %% Этот параметр используется для управления шифром по умолчанию для средств шифрования Laravel. .(alert) В Laravel 4.2 шифр по умолчанию - это %%(t)MCRYPT_RIJNDAEL_128%% (AES). Он считается самым безопасным шифром. Необходимо изменение значения шифра назад на %%(t)MCRYPT_RIJNDAEL_256%%, чтобы расшифровывать cookies/values, которые были зашифрованы в Laravel 4.1. === Модели безопасного удаления теперь используют типажи === Если вы используете модели безопасного удаления, знайте, что теперь параметр %%(t)softDeletes%% удалён. Теперь надо использовать %%(t)SoftDeletingTrait%%: %% use Illuminate\Database\Eloquent\SoftDeletingTrait; class User extends Eloquent { use SoftDeletingTrait; } %% Также надо вручную добавить поле %%(t)deleted_at%% в параметр %%(t)dates%%: %% class User extends Eloquent { use SoftDeletingTrait; protected $dates = ['deleted_at']; } %% API для операций безопасного удаления остался прежним. .(alert) %%(t)SoftDeletingTrait%% не может быть применён на базовую модель. Он должен быть в классе реальной модели. === Переименованы классы View и Pagination === Если вы непосредственно ссылаетесь на класс %%(t)Illuminate\View\Environment%% или класс %%(t)Illuminate\Pagination\Environment%%, обновите свой код на %%(t)Illuminate\View\Factory%% и %%(t)Illuminate\Pagination\Factory%% вместо них. Новое название лучше отражает их функции. === Дополнительный параметр в Pagination Presenter === Если вы наследуете класс %%(t)Illuminate\Pagination\Presenter%%, то теперь в абстрактный метод %%getPageLinkWrapper%% добавился параметр %%(t)rel%%: %% abstract public function getPageLinkWrapper($url, $page, $rel = null); %% === Шифрование очереди Iron.Io === Если вы используете драйвер очереди Iron.io, вам нужно будет добавить новый параметр %%(t)encrypt%% в конфигурационный файл очереди: %%(conf) 'encrypt' => true %% == Обновление до 4.1.29 с 4.1.x == В Laravel 4.1.29 улучшено квотирование столбцов для всех драйверов баз данных. Это защищает ваше приложение от некоторых уязвимостей массового назначения, когда в модели **не** используется параметр %%(t)fillable%%. Если вы используете параметр %%(t)fillable%% для защиты от массового назначения, ваше приложение не является уязвимым. Однако, если вы используете %%(t)guarded%% и передаёте пользовательские массивы в функции типа "update" или "save", вы должны скорей обновиться до %%(t)4.1.29%%, так как ваше приложение находится под угрозой массового назначения. Чтобы обновить Laravel до 4.1.29, просто запустите %%(sh)composer update%%. В этом релизе нет критических изменений. == Обновление до 4.1.26 с 4.1.25 == В Laravel 4.1.26 входят улучшения в области безопасности для cookies «запомнить меня». До этого обновления, если злоумышленник перехватывал cookie «запомнить меня», то этот cookie оставался действующим в течение длительного периода времени, даже после того как настоящий владелец аккаунта изменил свой пароль, вышел из системы и т.д. Это изменение требует добавления нового столбца %%(t)remember_token%% в таблицу базы данных %%(t)users%% (или её аналог). После этого изменения новый токен будет присваиваться пользователю каждый раз, когда он подключается к вашему приложению. Токен также будет обновлён, когда пользователь выйдет из приложения. Последствия этого изменения: если cookie "запомнить меня" перехвачен, простой выход из приложения обновит этот cookie. === Обновление Path === Во-первых, добавьте в таблицу %%(t)users%% новый, занулённый столбец %%(t)remember_token%% типа VARCHAR(100), TEXT, или эквивалентного типа. Во-вторых, если вы используете драйвер аутентификации Eloquent, добавьте в класс %%(t)User%% следующие три метода: %% public function getRememberToken() { return $this->remember_token; } public function setRememberToken($value) { $this->remember_token = $value; } public function getRememberTokenName() { return 'remember_token'; } %% .(alert) Все существующие сессии «запомнить меня» станут недействительны после этого изменения, так что все пользователи будут вынуждены повторно зайти в ваше приложение. === Создатели пакетов === Два новых метода были добавлены в интерфейс %%(t)Illuminate\Auth\UserProviderInterface%%. Примеры реализации можно найти в драйверах по умолчанию: %% public function retrieveByToken($identifier, $token); public function updateRememberToken(UserInterface $user, $token); %% %%(t)Illuminate\Auth\UserInterface%% также получил три новых метода, описанные выше в разделе "Обновление Path". == Обновление до 4.1 с 4.0 == === Обновление зависимостей Composer === Чтобы обновить своё приложение Laravel до 4.1, измените версию вашего %%(t)laravel/framework%% на %%(t)4.1.*%% в файле %%(t)composer.json%%. === Замена файлов === Замените свой файл %%(t)public/index.php%% ((https://github.com/laravel/laravel/blob/master/public/index.php на эту свежую копию из репозитория)). Замените свой файл %%(t)artisan%% ((https://github.com/laravel/laravel/blob/master/artisan на эту свежую копию из репозитория)). === Добавление файлов конфигурации и параметров === Обновите свои массивы %%(t)aliases%% и %%(t)providers%% в своём конфигурационном файле %%(t)app/config/app.php%%. Обновлённые значения для этих массивов можно найти (https://github.com/laravel/laravel/blob/master/app/config/app.php в этом файле)). Не забудьте заново добавить в массивы свои пользовательские и пакетные поставщики услуг и алиасы. Добавьте новый файл %%(t)app/config/remote.php%% (https://github.com/laravel/laravel/blob/master/app/config/remote.php из репозитория)). Добавьте новый параметр конфигурации %%(t)expire_on_close%% в свой файл %%(t)app/config/session.php%%. По умолчанию значение должно быть установлено в %%(t)false%%. Добавьте новую секцию %%(t)failed%% в свой файл %%(t)app/config/queue.php%%. По умолчанию значения секции должны быть следующими: %%(conf) 'failed' => array( 'database' => 'mysql', 'table' => 'failed_jobs', ), %% **(Необязательно)** Обновите параметр %%(t)pagination%% в файле %%(t)app/config/view.php%% на %%(t)pagination::slider-3%%. === Обновление контроллера === Если %%(t)app/controllers/BaseController.php%% содержит %%(t)use%% вверху, измените %%(t)use Illuminate\Routing\Controllers\Controller;%% на %%(t)use Illuminate\Routing\Controller;%% === Обновление сброса паролей === Сброс паролей был перестроен для большей гибкости. Вы можете изучить новый контроллер, выполнив Artisan-команду %%(sh)php artisan auth:reminders-controller%% (запускайте только после выполнения других изменений ниже). Вы можете также просмотреть ((/docs/v4/security#контроллер обновленную документацию)) и обновить своё приложение в соответствии с ней. Обновите свой языковой файл %%(t)app/lang/en/reminders.php%% на ((https://github.com/laravel/laravel/blob/master/app/lang/en/reminders.php этот)) === Обновление обнаружения среды === Из соображений безопасности URL-домены больше не используются для обнаружения среды приложения. Эти значения легко подменить, а это позволит злоумышленникам изменить среду для запроса. Используйте для обнаружения среды имена хостов (команда %%(sh)hostname%% на Mac, Linux и Windows). === Более простые лог-файлы === Laravel теперь генерирует единственный файл журнала: %%(t)app/storage/logs/laravel.log%%. Однако вы по-прежнему можете настроить ведение журналов с помощью файла %%(t)app/start/global.php%%. === Удаление завершающего слеша для переадресации === В вашем файле %%(t)bootstrap/start.php%% удалите вызов %%$app->redirectIfTrailingSlash()%%. Этот метод больше не нужен, так как это функция теперь реализована в файле %%(t).htaccess%%, включенном в фреймворк. Затем замените файл %%(t).htaccess%% вашего Apache на ((https://github.com/laravel/laravel/blob/master/public/.htaccess этот новый файл)), который обрабатывает завершающие слешы. === Доступ к текущему маршруту === Текущий маршрут теперь доступен с помощью %%Route::current()%% вместо %%Route::getCurrentRoute()%%. === Обновление Composer === Как только вы завершили все перечисленные выше обновления, вы можете выполнить команду %%(sh)composer update%%, чтобы обновить файлы ядра приложения! Если у вас появляются ошибки загрузки класса, попытайтесь выполнить команду %%(sh)update%% с параметром %%(sh)--no-scripts%%: %%(sh) composer update --no-scripts %% На Linux вам может потребоваться сделать %%(sh)sudo composer update%%, если вы получаете ошибку доступа. === Слушатели событий по шаблону === Слушатели событий по шаблону теперь не передают события в параметры ваших функций-обработчиков. Если вам надо найти событие, которое было запущено, вы должны использовать %%Event::firing()%%.