craftcms/cms
Craft CMS is a flexible, user-friendly PHP CMS for building custom web experiences. Features a Twig templating system, auto-generated GraphQL API for headless builds, ecommerce via Craft Commerce, a plugin store, and a powerful extension framework.
Yiisoft\Translator\Translator instance, enabling Yiisoft\Translator\Event\MissingTranslationEvent listeners. (#18952)loginPath config setting is now false by default.PluginsLoaded event to PluginsRegistered. (#18973)CraftCms\Cms\Support\Typecast could skip setters that used a same-name private backing property.CraftCms\Cms\Support\Typecast could attempt to assign read-only, private-set, protected-set, or setterless virtual properties.CraftCms\Cms\Validation\Contracts\Validatable::prepareForValidation() wasn’t called consistently, and plain Validatable classes without a configured ruleset couldn’t be validated. (#18944)config/license.key instead of config/craft/license.key.code class. (#18900)storage/runtime/ directory was getting created even if runtimePath was being overridden in config/app.php. (#18936)craft\services\Path::getRuntimePath(). Craft::$app->getRuntimePath() should be called instead.config/app.php wasn’t possible. (#18936)php artisan schedule:run.yiisoft/html to 4.1.0. (#18920)elvanto/litemoji to 5.2.0. (#18917)pragmarx/google2fa to 9.0.0. (#18919)sources values. (#18915)web middleware.loginPath or logoutPath was set to false in GeneralConfig. (#18894)craft template variable. (#18903)null as the response (#18907)ol and ul were not normalizing the attributes (#18907)compiledTemplatesPath config setting. (#18861)minAuthors to the section table (#18875)cpTrigger would be appended twice to the URL after running migrations from the control panel. (#18858)Stringable objects. (#18883)|default filter only accepted string values. (#18886)config/craft/sanitizers/. (#18808)paginate Twig variable back.craftAsset() Twig function now resolves to Vite versioned assets. (#18801)|money Twig filter’s formatLocale argument to locale.csrfTokenName, enableCsrfCookie, and enableCsrfProtection general config settings. (#18806)CraftCms\Cms\View\TwigEngine. (#18804)CraftCms\Cms\Support\Typecast could give private properties precedence over typed setters.runQueueAutomatically wasn’t being respected. (#18817)CraftCms\Cms\Validation\Rules\EnvValueRule could parse boolean values incorrectly.craft:.DefaultController.Application::EVENT_AFTER_REQUEST event wasn’t triggered.yii\base\InvalidConfigException would be thrown when a Yii2-based plugin registered an asset bundle. (#18818){{ successMessageInput() }} would not decrypt the resulting message for the flash message.getHasSsoIdentity() would return false when Socialite was not installed but the user had an SSO identity.null but were not considered handled.craft:install in environments where Laravel Prompts can only render tasks statically. (#18830)orderBy() arguments could cause element queries to throw an unknown column exception. (#18852)min-width styles based on their configured widths, if set. (#18534)<br> tags. (#18058)--to-default option to resave commands. (#18522)--method option to the users/remove-2fa command. (#18732)heading()/h() and h1()…h6() Twig functions. (#18524)tag() Twig function now accepts a string for its second argument. (#18524)|attr, |parseAttr, and |removeClass Twig filters no longer log warnings when performed on a string without an HTML tag. (#17622)|default Twig filter and is empty Twig test now treat all yii\base\Model instances as not empty. (#18727)|number Twig filter now has a locale argument. (#18823)|time and |datetime Twig filters now have withTimeZone arguments. (#18639)|timestamp Twig filter now returns the current time, if applied to a null/empty string value. (#18642)dataUrl() is no longer allowed in sandboxed Twig environments by default.delete GraphQL queries now have a hardDelete argument. (#18511)postDate values are now null on creation, rather than set to the dateCreated value. (#18642)url GraphQL fields’ immediately arguments are no longer deprecated. (#18581)craft\filters\SecFetchSiteFilter for request origin verification. (#18641)craft\fields\data\LinkData::getUrl() now has an $anyStatus argument, which can be set to false to prevent a value from being returned if a disabled/pending/expired element is linked. (#18527)craft\base\DefaultableFieldInterface. (#18522)craft\base\Element::EVENT_DEFINE_DELETION_BLOCKERS. (#18728)craft\base\ElementActionInterface::getTriggerId().craft\base\ElementInterface::deletionBlockers(). (#18728)craft\base\ElementInterface::setDirtyFieldTracking().craft\elements\PopulateElementEvent::$content.craft\elements\db\ElementQuery::$activeQuery.craft\elements\db\ElementQueryInterface::collectIds().craft\elements\deletionblockers\BaseDeletionBlocker. (#18728)craft\elements\deletionblockers\DeletionBlockerInterface. (#18728)craft\elements\deletionblockers\EntryAuthorsBlocker. (#18728)craft\elements\deletionblockers\RelationDeletionBlocker. (#18728)craft\errors\FieldNotFoundException::$fieldId.craft\events\DefineElementDeletionBlockersEvent. (#18728)craft\fieldlayoutelements\CustomField::setFieldId().craft\helpers\ElementHelper::belongsToCanonicalOwner().craft\helpers\Html::jsWithVars().craft\helpers\Markdown. (#18671)craft\models\Section::$minAuthors. (#18662)craft\queue\jobs\ReplaceRelations. (#18728)craft\services\Elements::REF_TAG_PATTERN.craft\services\Entries::reassignEntries().craft\validators\TimeValidator::$outOfRange. (#18575)Craft.CpScreenSlideout::reload(). (#18625)Craft.ElementDeletionManager.craft\elements\PopulateElementEvent::$row no longer includes fieldValues or generatedFieldValues keys.craft\helpers\DateTimeHelper::timeZoneAbbreviation() is no longer deprecated, and now has a $date argument.craft\i18n\Formatter::asTime() and asDatetime() now have $withTimeZone arguments. (#18639)craft\controllers\AppController::actionResourceJs(). (#18559)Craft.CP now triggers a queueCompleted event when the last queue job is completed.craft\controllers\UsersController::EVENT_DEFINE_CONTENT_SUMMARY. (#18728)craft\elements\User::$inheritorOnDelete. (#18728)craft\elements\actions\DeleteUsers. (#18728)craft\events\DefineUserContentSummaryEvent. (#18728)Craft.DeleteUserModal. (#18728)optimizeImageFilesize is disabled. (#18635)|default Twig filter and is empty Twig test now treat all yii\base\Model instances as not empty. (#18727)craft\filters\SecFetchSiteFilter for request origin verification. (#18641)dataUrl() is no longer allowed in sandboxed Twig environments by default.craft\controllers\AppController::actionResourceJs(). (#18559)entrify/global-set command on subsequent environments. (#18767)CraftCms\Cms\Support\Arr.CraftCms\Cms\Support\DateTimeHelper.CraftCms\Cms\Support\File.CraftCms\Cms\Support\Facades\Path.CraftCms\Cms\Support\Facades\Markdown.CraftCms\Cms\Support\Path.CraftCms\Cms\Support\Str.CraftCms\Cms\Support\URL.CraftCms\Cms\action_url(), CraftCms\Cms\cp_url(), and CraftCms\Cms\site_url() helper functions.craft\services\Elements::stopCollectingCacheInfo() no longer sets the returned duration to the cacheDuration config setting if a duration wasn’t explicitly declared. (#16796)craft\helpers\ArrayHelper. CraftCms\Cms\Support\Arr should be used instead.craft\helpers\ConfigHelper. CraftCms\Cms\Support\Config should be used instead.craft\helpers\DateTimeHelper. CraftCms\Cms\Support\DateTimeHelper should be used instead.craft\helpers\Diff. CraftCms\Cms\Support\Diff should be used instead.craft\helpers\ElementHelper. CraftCms\Cms\Element\ElementHelper should be used for core element helper APIs, CraftCms\Cms\Element\ElementSources for source lookup, CraftCms\Cms\Element\ElementAttributeRenderer for attribute rendering, CraftCms\Cms\Element\Drafts for provisional draft helpers, CraftCms\Cms\Field\Enums\TranslationMethod for translation helpers, and Illuminate\Support\Facades\Context with CraftCms\Cms\Element\Drafts::CONTEXT_PREVIEW_USER_ID for preview-user context.craft\helpers\Html. CraftCms\Cms\Support\Html should be used instead.craft\helpers\HtmlPurifier. CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers should be used for HTML sanitization, and CraftCms\Cms\Support\Str should be used for UTF-8 cleanup instead.craft\helpers\HtmlPurifier::process(). CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers::sanitize() should be used instead.craft\helpers\HtmlPurifier::cleanUtf8().craft\helpers\HtmlPurifier::convertToUtf8(). CraftCms\Cms\Support\Str::convertToUtf8() should be used instead.craft\helpers\HtmlPurifier::configure(). CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers::defaults() or a custom sanitizer registration should be used instead.config/craft/htmlpurifier/*.json sanitizer config files. Sanitizers should be registered on CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers instead.craft\services\Path. CraftCms\Cms\Support\Path should be used instead.craft\helpers\SessionHelper. Illuminate\Support\Facades\Session should be used instead.craft\helpers\Sequence. CraftCms\Cms\Support\Sequence should be used instead.craft\helpers\StringHelper. CraftCms\Cms\Support\Str should be used instead.Craft::$app->getConfig()->getGeneral(). CraftCms\Cms\Config\GeneralConfig should be used instead. This can be used through dependency injection or through app(CraftCms\Cms\Config\GeneralConfig::class).craft.app.config.general in Twig. app.config.craft.general should be used instead.craft\helpers\App::env(), CraftCms\Cms\Support\Env::get() should be used instead.craft\markdown\Markdown, craft\markdown\GithubMarkdown, craft\markdown\MarkdownExtra, and craft\markdown\PreEncodedMarkdown. CraftCms\Cms\Support\Facades\Markdown should be used instead.craft\helpers\DateRange. CraftCms\Cms\Shared\Enums\DateRangeType and CraftCms\Cms\Shared\Enums\DateRangePeriod should be used instead.craft\helpers\Cp. One of the following classes should be used instead:
CraftCms\Cms\Cp\AlertsCraftCms\Cms\Cp\FormFieldsCraftCms\Cms\Cp\Html\ContentHtmlCraftCms\Cms\Cp\Html\ElementHtmlCraftCms\Cms\Cp\Html\ElementIndexHtmlCraftCms\Cms\Cp\Html\MenuHtmlCraftCms\Cms\Cp\Html\PreviewHtmlCraftCms\Cms\Cp\Html\StatusHtmlCraftCms\Cms\Cp\IconsCraftCms\Cms\Cp\RequestedSitecraft\helpers\Json. CraftCms\Cms\Support\Json should be used instead.craft\services\Composer. CraftCms\Cms\Support\Composer should be used instead.craft\enums\Color. CraftCms\Cms\Support\Enums\Color should be used instead.craft\enums\AttributeStatus. CraftCms\Cms\Element\Enums\AttributeStatus should be used instead.craft\enums\CmsEdition. CraftCms\Cms\Edition should be used instead.craft\enums\ElementIndexViewMode. CraftCms\Cms\Element\Enums\ElementIndexViewMode should be used instead.craft\enums\LicenseKeyStatus. CraftCms\Cms\Support\Enums\LicenseKeyStatus should be used instead.craft\enums\MenuItemType. CraftCms\Cms\Element\Enums\MenuItemType should be used instead.craft\enums\PropagationMethod. CraftCms\Cms\Element\Enums\PropagationMethod should be used instead.craft\enums\TimePeriod. CraftCms\Cms\Support\Enums\TimePeriod should be used instead.craft\services\Gc. CraftCms\Cms\GarbageCollection\GarbageCollection should be used instead.craft\services\Api. CraftCms\Cms\Support\Api should be used instead.craft\helpers\Api. CraftCms\Cms\Support\Api should be used instead.craft\nameparsing\CustomLanguage. CraftCms\Cms\Shared\Nameparser\CustomLanguage should be used instead.craft\helpers\App. The following classes/methods should be used instead:
App:devMode() -> app()->hasDebugModeEnabled()App:parseBooleanEnv() --> \CraftCms\Cms\Support\Env::parseBoolean()App:normalizeValue() --> \CraftCms\Cms\normalizeValue()App:maxPowerCaptain() --> \CraftCms\Cms\maxPowerCaptain()App:silence() --> \CraftCms\Cms\silence()App:backtrace() --> \CraftCms\Cms\backtraceAsString()App:env() --> \CraftCms\Cms\Support\Env::get()App:parseEnv() --> \CraftCms\Cms\Support\Env::parse()App:phpVersion() --> \CraftCms\Cms\Support\PHP::version()App:extensionVersion() --> \CraftCms\Cms\Support\PHP::extensionVersion()App:phpConfigValueAsBool() --> \CraftCms\Cms\Support\PHP::configValueAsBool()App:phpConfigValueInBytes() --> \CraftCms\Cms\Support\PHP::configValueInBytes()App:phpSizeToBytes() --> \CraftCms\Cms\Support\PHP::sizeToBytes()App:phpConfigValueAsPaths() --> \CraftCms\Cms\Support\PHP::configValueAsPaths()App:normalizePhpPaths() --> \CraftCms\Cms\Support\PHP::normalizePaths()App:isPathAllowed() --> \CraftCms\Cms\Support\PHP::isPathAllowed()App:phpExecutable() --> \CraftCms\Cms\Support\PHP::executable()App:testIniSet() --> \CraftCms\Cms\Support\PHP::testIniSet()App:checkForValidIconv() --> \CraftCms\Cms\Support\PHP::checkForValidIconv()App:supportsIdn() --> \CraftCms\Cms\Support\PHP::supportsIdn()App:licenseKey() --> app(\CraftCms\Cms\License\License::class)->key()App:licensingIssues() --> app(\CraftCms\Cms\License\License::class)->issues()App:licenseShunCookieName() --> app(\CraftCms\Cms\License\License::class)->shunCookieName()App:licensingIssuesHash() --> app(\CraftCms\Cms\License\License::class)->issuesHash()Craft::createGuzzleClient(). CraftCms\Cms\Support\Facades\Http::create() should be used instead.craft\helpers\FileHelper. CraftCms\Cms\Support\File should be used instead.craft\helpers\UrlHelper. CraftCms\Cms\Support\URL should be used instead.CraftCms\Cms\Support\Facades\Deprecator.CraftCms\Cms\Deprecator\Commands\ClearDeprecations.craft\console\controllers\ClearDeprecationsController.php.craft\services\Deprecator. CraftCms\Cms\Deprecator\Deprecator should be used instead.craft\models\DeprecationError. CraftCms\Cms\Deprecator\Models\DeprecationError should be used instead.craft\errors\DeprecationException. CraftCms\Cms\Deprecator\Exceptions\DeprecationException should be used instead.php craft twig:cache - Precompile Twig viewsphp craft twig:clear - Clear precompiled Twig viewscraft\console\controllers\EnvController has been removed in favor of the classes below:
CraftCms\Cms\Console\Commands\Env\EnvRemoveCommand => php craft env:removeCraftCms\Cms\Console\Commands\Env\EnvSetCommand => php craft env:setCraftCms\Cms\Console\Commands\Env\EnvShowCommand => php craft env:showcraft\console\controllers\IndexAssetsController has been removed in favor of the classes below:
CraftCms\Cms\Asset\Commands\CleanupAssetIndexesCommand => php craft index-assets:cleanupCraftCms\Cms\Asset\Commands\IndexAllAssetsCommand => php craft index-assets:allCraftCms\Cms\Asset\Commands\IndexOneAssetCommand => php craft index-assets:onecraft\console\controllers\BaseSystemStatusController, craft\console\controllers\OnController, and craft\console\controllers\OffController have been removed in favor of the classes below:
CraftCms\Cms\Console\Commands\System\OnCommand => php craft onCraftCms\Cms\Console\Commands\System\OffCommand => php craft offcraft\console\controllers\ElementsController has been removed in favor of the classes below:
CraftCms\Cms\Element\Commands\DeleteCommand => php craft elements:deleteCraftCms\Cms\Element\Commands\DeleteAllOfTypeCommand => php craft elements:delete-all-of-typeCraftCms\Cms\Element\Commands\RestoreCommand => php craft elements:restorecraft\console\controllers\UpdateStatusesController has been removed in favor of the class below:
CraftCms\Cms\Entry\Commands\UpdateStatusesCommand => php craft update-statusescraft\console\controllers\utils\FixElementUidsController has been removed in favor of the class below:
CraftCms\Cms\Console\Commands\Utils\FixElementUidsCommand => php craft utils:fix-element-uidscraft\console\controllers\utils\FixFieldLayoutUidsController has been removed in favor of the class below:
CraftCms\Cms\Console\Commands\Utils\FixFieldLayoutUidsCommand => php craft utils:fix-field-layout-uidscraft\console\controllers\utils\PruneOrphanedEntriesController has been removed in favor of the class below:
CraftCms\Cms\Console\Commands\Utils\PruneOrphanedEntriesCommand => php craft utils:prune-orphaned-entriescraft\console\controllers\utils\PruneProvisionalDraftsController has been removed in favor of the class below:
CraftCms\Cms\Console\Commands\Utils\PruneProvisionalDraftsCommand => php craft utils:prune-provisional-draftscraft\console\controllers\utils\PruneRevisionsController has been removed in favor of the class below:
CraftCms\Cms\Console\Commands\Utils\PruneRevisionsCommand => php craft utils:prune-revisionscraft\console\controllers\utils\RepairController::actionProjectConfig() has been removed in favor of the class below:
CraftCms\Cms\ProjectConfig\Commands\RepairCommand => php craft project-config:repairCraft's Mutex classes have been deprecated. Laravel's atomic locking should be used instead.
craft\mutex\Mutexcraft\mutex\MutexTraitCraft::$app->getMutex()craft\base\ComponentInterface. CraftCms\Cms\Component\Contracts\ComponentInterface should be used instead.craft\base\ConfigurableComponentInterface. CraftCms\Cms\Component\Contracts\ConfigurableComponentInterface should be used instead.craft\base\SavableComponentInterface. CraftCms\Cms\Component\Contracts\SavableComponentInterface should be used instead.craft\controllers\DashboardController. The following controllers now implement this functionality:
CraftCms\Cms\Http\Controllers\Dashboard\DashboardControllerCraftCms\Cms\Http\Controllers\Dashboard\WidgetsControllerCraftCms\Cms\Http\Controllers\Dashboard\Widgets\CraftSupportControllerCraftCms\Cms\Http\Controllers\Dashboard\Widgets\FeedControllerCraft::$app->getDashboard(). app(\CraftCms\Cms\Dashboard\Dashboard::class) should be used instead.craft\services\Dashboard. CraftCms\Cms\Dashboard\Dashboard should be used instead.craft\base\Widget. CraftCms\Cms\Dashboard\Widgets\Widget should be used instead.craft\base\WidgetInterface. CraftCms\Cms\Dashboard\Contracts\WidgetInterface should be used instead.craft\base\WidgetTrait.craft\widgets\CraftSupport. CraftCms\Cms\Dashboard\Widgets\CraftSupport should be used instead.craft\widgets\Feed. CraftCms\Cms\Dashboard\Widgets\Feed should be used instead.craft\widgets\MissingWidget. CraftCms\Cms\Dashboard\Widgets\MissingWidget should be used instead.craft\widgets\MyDrafts. CraftCms\Cms\Dashboard\Widgets\MyDrafts should be used instead.craft\widgets\NewUsers. CraftCms\Cms\Dashboard\Widgets\NewUsers should be used instead.craft\widgets\QuickPost. CraftCms\Cms\Dashboard\Widgets\QuickPost should be used instead.craft\widgets\RecentEntries. CraftCms\Cms\Dashboard\Widgets\RecentEntries should be used instead.craft\widgets\Updates. CraftCms\Cms\Dashboard\Widgets\Updates should be used instead.craft\records\Widget. CraftCms\Cms\Dashboard\Models\Widget should be used instead.craft\services\Dashboard::EVENT_REGISTER_WIDGET_TYPES. CraftCms\Cms\Dashboard\Events\WidgetTypesResolving should be used instead.craft\events\WidgetEvent in favor of the following new events:
craft\services\Dashboard::EVENT_BEFORE_SAVE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetSavingcraft\services\Dashboard::EVENT_AFTER_SAVE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetSavedcraft\services\Dashboard::EVENT_BEFORE_DELETE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetDeletingcraft\services\Dashboard::EVENT_AFTER_DELETE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetDeletedCraftCms\Cms\Support\Facades\Addresses.CraftCms\Cms\Asset\AssetsHelper.CraftCms\Cms\Support\Facades\Assets.CraftCms\Cms\Support\Facades\AssetIndexer facade.CraftCms\Cms\Support\Facades\Folders.craft\helpers\Assets. CraftCms\Cms\Asset\AssetsHelper should be used instead.craft\services\Assets. CraftCms\Cms\Asset\Assets and CraftCms\Cms\Asset\Folders should be used instead.\craft\records\Asset. \CraftCms\Cms\Asset\Models\Asset should be used instead.\craft\records\AssetIndexData. \CraftCms\Cms\Asset\Models\AssetIndexData should be used instead.\craft\records\AssetIndexingSession. \CraftCms\Cms\Asset\Models\AssetIndexingSession should be used instead.\craft\records\Volume. \CraftCms\Cms\Asset\Models\Volume should be used instead.\craft\records\VolumeFolder. \CraftCms\Cms\Asset\Models\VolumeFolder should be used instead.\craft\controllers\AssetIndexesController. \CraftCms\Cms\Http\Controllers\Utilities\AssetIndexesController should be used instead.craft\services\AssetIndexer. CraftCms\Cms\Asset\AssetIndexer should be used instead.craft\models\AssetIndexData. CraftCms\Cms\Asset\Data\AssetIndexEntry should be used instead.craft\models\AssetIndexingSession. CraftCms\Cms\Asset\Data\IndexingSession should be used instead.craft\errors\AssetException. CraftCms\Cms\Asset\Exceptions\AssetException should be used instead.craft\errors\AssetDisallowedExtensionException. CraftCms\Cms\Asset\Exceptions\AssetDisallowedExtensionException should be used instead.craft\errors\AssetNotIndexableException. CraftCms\Cms\Asset\Exceptions\AssetNotIndexableException should be used instead.craft\errors\FileException. CraftCms\Cms\Asset\Exceptions\FileException should be used instead.craft\errors\ImageException. CraftCms\Cms\Asset\Exceptions\ImageException should be used instead.craft\errors\ImageTransformException. CraftCms\Cms\Asset\Exceptions\ImageTransformException should be used instead.craft\errors\MissingAssetException. CraftCms\Cms\Asset\Exceptions\MissingAssetException should be used instead.craft\errors\MissingVolumeFolderException. CraftCms\Cms\Asset\Exceptions\MissingVolumeFolderException should be used instead.craft\errors\VolumeException. CraftCms\Cms\Asset\Exceptions\VolumeException should be used instead.CraftCms\Cms\Asset\Events\AssetFileKindsResolving.CraftCms\Cms\Asset\Events\SetAssetFilename.craft\events\SetAssetFilenameEvent. CraftCms\Cms\Asset\Events\SetAssetFilename should be used instead.craft\events\RegisterAssetFileKindsEvent. CraftCms\Cms\Asset\Events\AssetFileKindsResolving should be used instead.craft\events\ReplaceAssetEvent in favor of the following new events:
craft\services\Assets::EVENT_BEFORE_REPLACE_ASSET => CraftCms\Cms\Asset\Events\AssetReplacingcraft\services\Assets::EVENT_AFTER_REPLACE_ASSET => CraftCms\Cms\Asset\Events\AssetReplacedcraft\events\DefineAssetThumbUrlEvent. CraftCms\Cms\Asset\Events\ThumbUrlResolving should be used instead.craft\events\AssetPreviewEvent. CraftCms\Cms\Asset\Events\PreviewHandlerResolving should be used instead.CraftCms\Cms\Auth\Events\SettingPassword.CraftCms\Cms\User\Notifications\ResetPasswordNotification.craft\services\Auth. CraftCms\Cms\Auth\Auth should be used instead.craft\web\User. auth('craft')->user() or CraftCms\Cms\User\Elements\User methods should be used instead.craft\events\AuthenticateUserEvent. CraftCms\Cms\Auth\Events\UserAuthenticating should be used instead.\craft\records\Authenticator. \CraftCms\Cms\Auth\Models\Authenticator should be used instead.\craft\records\RecoveryCodes. \CraftCms\Cms\Auth\Models\RecoveryCodes should be used instead.\craft\records\SsoIdentity. \CraftCms\Cms\Auth\Models\SsoIdentity should be used instead.\craft\records\WebAuthn. \CraftCms\Cms\Auth\Models\WebAuthn should be used instead.craft\behaviors\SessionBehavior::authorize. CraftCms\Cms\Auth\SessionAuth::authorize should be used instead.craft\behaviors\SessionBehavior::deauthorize. CraftCms\Cms\Auth\SessionAuth::deauthorize should be used instead.craft\behaviors\SessionBehavior::checkAuthorization. CraftCms\Cms\Auth\SessionAuth::checkAuthorization should be used instead.craft\services\Users::isVerificationCodeValidForUser(). Password::broker('craft')->tokenExists($user, $code) should be used instead.GeneralConfig::elevatedSessionDuration(). The auth.password_timeout config value should be used instead. To disable password confirmation (elevated sessions), you now set this value to -1 instead of 0.
craft\controllers\AuthController. The following controllers now implement this functionality:
CraftCms\Cms\Http\Controllers\Users\AuthMethodControllerCraftCms\Cms\Http\Controllers\Users\PasskeysControllerCraftCms\Cms\Http\Controllers\Users\RecoveryCodesControllerverificationCode and verificationCodeIssuedDate columns on the users table in favor of the password_reset_tokens table.Craft 6 now uses Laravel's authorization system for element authorization checks.
CraftCms\Cms\Auth\Events\ElementAuthorizing event for customizing element authorization.CraftCms\Cms\Element\Policies\ElementPolicy base policy for element authorization.CraftCms\Cms\Address\Policies\AddressPolicyCraftCms\Cms\Asset\Policies\AssetPolicyCraftCms\Cms\Entry\Policies\EntryPolicyCraftCms\Cms\User\Policies\UserPolicyCraftCms\Cms\Field\Policies\ContentBlockPolicyCraftCms\Cms\Auth\Passkeys\Passkeys.craft\services\Auth passkey methods. The following should be used instead:
Auth::hasPasskeys() -> app(Passkeys::class)->hasPasskeys()Auth::getPasskeys() -> app(Passkeys::class)->getPasskeys()Auth::getPasskeyCreationOptions() -> app(Passkeys::class)->getPasskeyCreationOptions()Auth::verifyPasskeyCreationResponse() -> app(Passkeys::class)->verifyPasskeyCreationResponse()Auth::getPasskeyRequestOptions() -> app(Passkeys::class)->getPasskeyRequestOptions()Auth::verifyPasskey() -> app(Passkeys::class)->verifyPasskey()Auth::deletePasskey() -> app(Passkeys::class)->deletePasskey()craft\auth\passkeys\CredentialRepository. CraftCms\Cms\Auth\Passkeys\CredentialRepository should be used instead.craft\auth\passkeys\WebauthnServer. CraftCms\Cms\Auth\Passkeys\WebauthnServer should be used instead.CraftCms\Cms\Support\Facades\Conditions.craft\controllers\ConditionsController. CraftCms\Cms\Http\Controllers\ConditionsController should be used instead.craft\services\Conditions. CraftCms\Cms\Condition\Conditions should be used instead.craft\base\conditions\ConditionInterface. CraftCms\Cms\Condition\Contracts\ConditionInterface should be used instead.craft\base\conditions\ConditionRuleInterface. CraftCms\Cms\Condition\Contracts\ConditionRuleInterface should be used instead.craft\base\conditions\BaseCondition. CraftCms\Cms\Condition\BaseCondition should be used instead.craft\base\conditions\BaseConditionRule. CraftCms\Cms\Condition\BaseConditionRule should be used instead.craft\base\conditions\BaseTextConditionRule. CraftCms\Cms\Condition\BaseTextConditionRule should be used instead.craft\base\conditions\BaseNumberConditionRule. CraftCms\Cms\Condition\BaseNumberConditionRule should be used instead.craft\base\conditions\BaseSelectConditionRule. CraftCms\Cms\Condition\BaseSelectConditionRule should be used instead.craft\base\conditions\BaseMultiSelectConditionRule. CraftCms\Cms\Condition\BaseMultiSelectConditionRule should be used instead.craft\base\conditions\BaseLightswitchConditionRule. CraftCms\Cms\Condition\BaseLightswitchConditionRule should be used instead.craft\base\conditions\BaseDateRangeConditionRule. CraftCms\Cms\Condition\BaseDateRangeConditionRule should be used instead.craft\base\conditions\BaseElementSelectConditionRule. CraftCms\Cms\Condition\BaseElementSelectConditionRule should be used instead.craft\elements\conditions\ElementCondition. CraftCms\Cms\Element\Conditions\ElementCondition should be used instead.craft\elements\conditions\ElementConditionInterface. CraftCms\Cms\Element\Conditions\Contracts\ElementConditionInterface should be used instead.craft\elements\conditions\ElementConditionRuleInterface. CraftCms\Cms\Element\Conditions\Contracts\ElementConditionRuleInterface should be used instead.craft\elements\conditions\HintableConditionRuleTrait. CraftCms\Cms\Element\Conditions\HintableConditionRuleTrait should be used instead.craft\elements\conditions\TitleConditionRule. CraftCms\Cms\Element\Conditions\TitleConditionRule should be used instead.craft\elements\conditions\SlugConditionRule. CraftCms\Cms\Element\Conditions\SlugConditionRule should be used instead.craft\elements\conditions\UriConditionRule. CraftCms\Cms\Element\Conditions\UriConditionRule should be used instead.craft\elements\conditions\IdConditionRule. CraftCms\Cms\Element\Conditions\IdConditionRule should be used instead.craft\elements\conditions\StatusConditionRule. CraftCms\Cms\Element\Conditions\StatusConditionRule should be used instead.craft\elements\conditions\HasUrlConditionRule. CraftCms\Cms\Element\Conditions\HasUrlConditionRule should be used instead.craft\elements\conditions\HasDescendantsRule. CraftCms\Cms\Element\Conditions\HasDescendantsRule should be used instead.craft\elements\conditions\LevelConditionRule. CraftCms\Cms\Element\Conditions\LevelConditionRule should be used instead.craft\elements\conditions\DateCreatedConditionRule. CraftCms\Cms\Element\Conditions\DateCreatedConditionRule should be used instead.craft\elements\conditions\DateUpdatedConditionRule. CraftCms\Cms\Element\Conditions\DateUpdatedConditionRule should be used instead.craft\elements\conditions\SiteConditionRule. CraftCms\Cms\Element\Conditions\SiteConditionRule should be used instead.craft\elements\conditions\SiteGroupConditionRule. CraftCms\Cms\Element\Conditions\SiteGroupConditionRule should be used instead.craft\elements\conditions\LanguageConditionRule. CraftCms\Cms\Element\Conditions\LanguageConditionRule should be used instead.craft\elements\conditions\RelatedToConditionRule. CraftCms\Cms\Element\Conditions\RelatedToConditionRule should be used instead.craft\elements\conditions\NotRelatedToConditionRule. CraftCms\Cms\Element\Conditions\NotRelatedToConditionRule should be used instead.craft\elements\conditions\entries\EntryCondition. CraftCms\Cms\Entry\Conditions\EntryCondition should be used instead.craft\elements\conditions\entries\PostDateConditionRule. CraftCms\Cms\Entry\Conditions\PostDateConditionRule should be used instead.craft\elements\conditions\entries\ExpiryDateConditionRule. CraftCms\Cms\Entry\Conditions\ExpiryDateConditionRule should be used instead.craft\elements\conditions\entries\SectionConditionRule. CraftCms\Cms\Entry\Conditions\SectionConditionRule should be used instead.craft\elements\conditions\entries\TypeConditionRule. CraftCms\Cms\Entry\Conditions\TypeConditionRule should be used instead.craft\elements\conditions\entries\AuthorConditionRule. CraftCms\Cms\Entry\Conditions\AuthorConditionRule should be used instead.craft\elements\conditions\entries\AuthorGroupConditionRule. CraftCms\Cms\Entry\Conditions\AuthorGroupConditionRule should be used instead.craft\elements\conditions\entries\ViewableConditionRule. CraftCms\Cms\Entry\Conditions\ViewableConditionRule should be used instead.craft\elements\conditions\entries\SavableConditionRule. CraftCms\Cms\Entry\Conditions\SavableConditionRule should be used instead.craft\elements\conditions\entries\FieldConditionRule. CraftCms\Cms\Entry\Conditions\FieldConditionRule should be used instead.craft\elements\conditions\users\UserCondition. CraftCms\Cms\User\Conditions\UserCondition should be used instead.craft\elements\conditions\users\UsernameConditionRule. CraftCms\Cms\User\Conditions\UsernameConditionRule should be used instead.craft\elements\conditions\users\EmailConditionRule. CraftCms\Cms\User\Conditions\EmailConditionRule should be used instead.craft\elements\conditions\users\FirstNameConditionRule. CraftCms\Cms\User\Conditions\FirstNameConditionRule should be used instead.craft\elements\conditions\users\LastNameConditionRule. CraftCms\Cms\User\Conditions\LastNameConditionRule should be used instead.craft\elements\conditions\users\GroupConditionRule. CraftCms\Cms\User\Conditions\GroupConditionRule should be used instead.craft\elements\conditions\users\AdminConditionRule. CraftCms\Cms\User\Conditions\AdminConditionRule should be used instead.craft\elements\conditions\users\CredentialedConditionRule. CraftCms\Cms\User\Conditions\CredentialedConditionRule should be used instead.craft\elements\conditions\users\LastLoginDateConditionRule. CraftCms\Cms\User\Conditions\LastLoginDateConditionRule should be used instead.craft\elements\conditions\users\AffiliatedSiteConditionRule. CraftCms\Cms\User\Conditions\AffiliatedSiteConditionRule should be used instead.craft\elements\conditions\assets\AssetCondition. CraftCms\Cms\Asset\Conditions\AssetCondition should be used instead.craft\elements\conditions\assets\VolumeConditionRule. CraftCms\Cms\Asset\Conditions\VolumeConditionRule should be used instead.craft\elements\conditions\assets\FilenameConditionRule. CraftCms\Cms\Asset\Conditions\FilenameConditionRule should be used instead.craft\elements\conditions\assets\FileTypeConditionRule. CraftCms\Cms\Asset\Conditions\FileTypeConditionRule should be used instead.craft\elements\conditions\assets\FileSizeConditionRule. CraftCms\Cms\Asset\Conditions\FileSizeConditionRule should be used instead.craft\elements\conditions\assets\HeightConditionRule. CraftCms\Cms\Asset\Conditions\HeightConditionRule should be used instead.craft\elements\conditions\assets\WidthConditionRule. CraftCms\Cms\Asset\Conditions\WidthConditionRule should be used instead.craft\elements\conditions\assets\DateModifiedConditionRule. CraftCms\Cms\Asset\Conditions\DateModifiedConditionRule should be used instead.craft\elements\conditions\assets\HasAltConditionRule. CraftCms\Cms\Asset\Conditions\HasAltConditionRule should be used instead.craft\elements\conditions\assets\UploaderConditionRule. CraftCms\Cms\Asset\Conditions\UploaderConditionRule should be used instead.craft\elements\conditions\assets\SavableConditionRule. CraftCms\Cms\Asset\Conditions\SavableConditionRule should be used instead.craft\elements\conditions\assets\ViewableConditionRule. CraftCms\Cms\Asset\Conditions\ViewableConditionRule should be used instead.craft\elements\conditions\addresses\AddressCondition. CraftCms\Cms\Address\Conditions\AddressCondition should be used instead.craft\elements\conditions\addresses\FullNameConditionRule. CraftCms\Cms\Address\Conditions\FullNameConditionRule should be used instead.craft\elements\conditions\addresses\OrganizationConditionRule. CraftCms\Cms\Address\Conditions\OrganizationConditionRule should be used instead.craft\elements\conditions\addresses\OrganizationTaxIdConditionRule. CraftCms\Cms\Address\Conditions\OrganizationTaxIdConditionRule should be used instead.craft\elements\conditions\addresses\LocalityConditionRule. CraftCms\Cms\Address\Conditions\LocalityConditionRule should be used instead.craft\elements\conditions\addresses\DependentLocalityConditionRule. CraftCms\Cms\Address\Conditions\DependentLocalityConditionRule should be used instead.craft\elements\conditions\addresses\PostalCodeConditionRule. CraftCms\Cms\Address\Conditions\PostalCodeConditionRule should be used instead.craft\elements\conditions\addresses\SortingCodeConditionRule. CraftCms\Cms\Address\Conditions\SortingCodeConditionRule should be used instead.craft\elements\conditions\addresses\CountryConditionRule. CraftCms\Cms\Address\Conditions\CountryConditionRule should be used instead.craft\elements\conditions\addresses\AdministrativeAreaConditionRule. CraftCms\Cms\Address\Conditions\AdministrativeAreaConditionRule should be used instead.craft\elements\conditions\addresses\AddressLine1ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine1ConditionRule should be used instead.craft\elements\conditions\addresses\AddressLine2ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine2ConditionRule should be used instead.craft\elements\conditions\addresses\AddressLine3ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine3ConditionRule should be used instead.craft\elements\conditions\addresses\FieldConditionRule. CraftCms\Cms\Address\Conditions\FieldConditionRule should be used instead.craft\fields\conditions\FieldConditionRuleInterface. CraftCms\Cms\Field\Conditions\Contracts\FieldConditionRuleInterface should be used instead.craft\fields\conditions\FieldConditionRuleTrait. CraftCms\Cms\Field\Conditions\FieldConditionRuleTrait should be used instead.craft\fields\conditions\GeneratedFieldConditionRule. CraftCms\Cms\Field\Conditions\GeneratedFieldConditionRule should be used instead.craft\fields\conditions\TextFieldConditionRule. CraftCms\Cms\Field\Conditions\TextFieldConditionRule should be used instead.craft\fields\conditions\NumberFieldConditionRule. CraftCms\Cms\Field\Conditions\NumberFieldConditionRule should be used instead.craft\fields\conditions\MoneyFieldConditionRule. CraftCms\Cms\Field\Conditions\MoneyFieldConditionRule should be used instead.craft\fields\conditions\OptionsFieldConditionRule. CraftCms\Cms\Field\Conditions\OptionsFieldConditionRule should be used instead.craft\fields\conditions\RelationalFieldConditionRule. CraftCms\Cms\Field\Conditions\RelationalFieldConditionRule should be used instead.craft\fields\conditions\LightswitchFieldConditionRule. CraftCms\Cms\Field\Conditions\LightswitchFieldConditionRule should be used instead.craft\fields\conditions\EmptyFieldConditionRule. CraftCms\Cms\Field\Conditions\EmptyFieldConditionRule should be used instead.craft\fields\conditions\DateFieldConditionRule. CraftCms\Cms\Field\Conditions\DateFieldConditionRule should be used instead.craft\fields\conditions\CountryFieldConditionRule. CraftCms\Cms\Field\Conditions\CountryFieldConditionRule should be used instead.craft\fields\conditions\LinkFieldConditionRule. CraftCms\Cms\Field\Conditions\LinkFieldConditionRule should be used instead.craft\events\RegisterConditionRulesEvent. CraftCms\Cms\Condition\Events\ConditionRulesResolving should be used instead.craft\services\Drafts. CraftCms\Cms\Element\Drafts should be used instead.craft\events\DraftEvent. One of the events extending CraftCms\Cms\Element\Events\DraftEvent should be used instead.craft\behaviors\DraftBehavior. CraftCms\Cms\Element\Concerns\Draftable should be used instead.CraftCms\Cms\Element\ElementCaches and CraftCms\Cms\Support\Facades\ElementCaches.
craft\services\Elements::getIsCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::isCollectingCacheInfo() should be used instead.craft\services\Elements::startCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::startCollectingCacheInfo() should be used instead.craft\services\Elements::collectCacheTags(). CraftCms\Cms\Element\ElementCaches::collectCacheTags() should be used instead.craft\services\Elements::setCacheExpiryDate(). CraftCms\Cms\Element\ElementCaches::setCacheExpiryDate() should be used instead.craft\services\Elements::collectCacheInfoForElement(). CraftCms\Cms\Element\ElementCaches::collectCacheInfoForElement() should be used instead.craft\services\Elements::stopCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::stopCollectingCacheInfo() should be used instead.craft\services\Elements::invalidateAllCaches(). CraftCms\Cms\Element\ElementCaches::invalidateAll() should be used instead.craft\services\Elements::invalidateCachesForElementType(). CraftCms\Cms\Element\ElementCaches::invalidateForElementType() should be used instead.craft\services\Elements::invalidateCachesForElement(). CraftCms\Cms\Element\ElementCaches::invalidateForElement() should be used instead.CraftCms\Cms\Element\BulkOp\BulkOps, CraftCms\Cms\Element\BulkOp\BulkOpDeferrals, and CraftCms\Cms\Support\Facades\BulkOps.
craft\services\Elements::getBulkOpKeys(). CraftCms\Cms\Element\BulkOp\BulkOps::activeKeys() should be used instead.craft\services\Elements::beginBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::start() should be used instead.craft\services\Elements::resumeBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::resume() should be used instead.craft\services\Elements::endBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::end() should be used instead.craft\services\Elements::trackElementInBulkOps(). CraftCms\Cms\Element\BulkOp\BulkOps::trackElement() should be used instead.craft\services\Elements::ensureBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::ensure() should be used instead.craft\events\BulkOpEvent::defer(). CraftCms\Cms\Element\BulkOp\BulkOps::defer() should be used instead.CraftCms\Cms\Element\ElementActivity, CraftCms\Cms\Element\Data\ElementActivity, CraftCms\Cms\Element\Enums\ElementActivityType, and CraftCms\Cms\Support\Facades\ElementActivity.
craft\services\Elements::getRecentActivity(). CraftCms\Cms\Element\ElementActivity::getRecentActivity() should be used instead.craft\services\Elements::trackActivity(). CraftCms\Cms\Element\ElementActivity::trackActivity() should be used instead.CraftCms\Cms\Element\Actions\ElementAction, CraftCms\Cms\Element\ElementActions, CraftCms\Cms\Element\Contracts\DeleteActionInterface, CraftCms\Cms\Element\Contracts\ElementActionInterface, CraftCms\Cms\Element\Events\ElementActionPerformed, CraftCms\Cms\Element\Events\ElementActionPerforming, CraftCms\Cms\Http\Controllers\Elements\PerformElementActionController, and CraftCms\Cms\Support\Facades\ElementActions.CraftCms\Cms\Element\Actions, CraftCms\Cms\Asset\Actions, CraftCms\Cms\Entry\Actions, and CraftCms\Cms\User\Actions.CraftCms\Cms\Element\ElementExporters, CraftCms\Cms\Element\Contracts\ElementExporterInterface, CraftCms\Cms\Element\Exporters\ElementExporter, CraftCms\Cms\Http\Controllers\Elements\ElementIndex\ExportElementIndexController, and CraftCms\Cms\Support\Facades\ElementExporters.CraftCms\Cms\Element\Exporters.craft\errors\InvalidTypeException. CraftCms\Cms\Element\Exceptions\InvalidTypeException should be used instead.craft\errors\UnsupportedSiteException. CraftCms\Cms\Element\Exceptions\UnsupportedSiteException should be used instead.craft\base\ElementAction, craft\base\ElementActionInterface, craft\elements\actions\DeleteActionInterface, and the legacy craft\elements\actions\* classes. The corresponding CraftCms\Cms\Element\Actions\*, CraftCms\Cms\Asset\Actions\*, CraftCms\Cms\Entry\Actions\*, and CraftCms\Cms\User\Actions\* classes should be used instead.craft\base\ElementExporter, craft\base\ElementExporterInterface, and the legacy craft\elements\exporters\* classes. The corresponding CraftCms\Cms\Element\Exporters\* classes should be used instead.Craft 6 introduces a new validation system that uses Laravel's Validator instead of Yii2's model validation.
CraftCms\Cms\Validation\Contracts\Validatable interface for classes that support Laravel-style validation.CraftCms\Cms\Validation\Contracts\ValidatableWithRuleset interface for classes that use a Ruleset class to define validation rules.CraftCms\Cms\Validation\Ruleset abstract class for defining validation rules, messages, and preparation logic.CraftCms\Cms\Validation\Attributes\Ruleset PHP attribute for specifying a component's ruleset class.CraftCms\Cms\Validation\Concerns\Validates trait for simple validation support.CraftCms\Cms\Validation\Concerns\ValidatesWithRuleset trait for ruleset-based validation.CraftCms\Cms\Validation\Concerns\HasScenarios trait for scenario-based validation filtering.CraftCms\Cms\Validation\Concerns\InteractsWithValidator trait providing common validator interactions.CraftCms\Cms\Element\Validation\ElementRules abstract class for defining element-specific validation rules.CraftCms\Cms\Element\Validation\Events\ValidationRulesResolving event for plugins to modify element validation rules.CraftCms\Cms\Element\Validation\Rules\ElementUriRule for validating element URIs.CraftCms\Cms\Address\Validation\AddressRulesCraftCms\Cms\Asset\Validation\AssetRulesCraftCms\Cms\Entry\Validation\EntryRulesCraftCms\Cms\User\Validation\UserRulesCraftCms\Cms\Field\Elements\ContentBlockRulesCraftCms\Cms\Asset\Validation\Rules\AssetLocationRule for validating asset locations.CraftCms\Cms\User\Validation\Rules\UserPasswordRule for validating user passwords.CraftCms\Cms\User\Validation\Rules\UsernameRule for validating usernames.CraftCms\Cms\Validation\Rules\UniqueCaseInsensitiveRule for case-insensitive unique validation.CraftCms\Cms\Validation\Rules\DisallowMb4 for disallowing 4-byte UTF-8 characters.CraftCms\Cms\Validation\Rules\MoneyRule for validating money values.FieldInterface::getElementValidationRules() has been replaced by FieldInterface::getElementRules() which returns rules in Laravel's validation format.FieldInterface::prepareForElementValidation() for preparing field values before validation.['required', 'string', 'max:255']).craft\base\Model::hasErrors(). Use ->errors()->has($attribute) or ->errors()->isNotEmpty() instead.craft\base\Model::getErrors(). Use ->errors()->get($attribute) or ->errors()->getMessages() instead.craft\base\Model::addErrors(). Use ->errors()->add($attribute, $message) instead.craft\base\Model::clearErrors(). Use ->errors()->forget() instead.CraftCms\Cms\Component\Concerns\ValidatableComponent. Use CraftCms\Cms\Validation\Concerns\Validates instead.CraftCms\Cms\Component\Contracts\ValidatableComponentInterface. Use CraftCms\Cms\Validation\Contracts\Validatable instead.\craft\records\ContentBlock. \CraftCms\Cms\Element\Models\ContentBlock should be used instead.\craft\records\Draft. \CraftCms\Cms\Element\Models\Draft should be used instead.\craft\records\Element. \CraftCms\Cms\Element\Models\Element should be used instead.\craft\records\Element_SiteSettings. \CraftCms\Cms\Element\Models\ElementSiteSettings should be used instead.\craft\records\Revision. \CraftCms\Cms\Element\Models\Revision should be used instead.craft\services\ElementSources. CraftCms\Cms\Element\ElementSources should be used instead.craft\events\DefineSourceSortOptionsEvent. CraftCms\Cms\Element\Events\ElementSourceSortOptionsResolving should be used instead.craft\events\DefineSourceTableAttributesEvent. CraftCms\Cms\Element\Events\ElementSourceTableAttributesResolving should be used instead.craft\elements\db\ElementRelationParamParser. CraftCms\Cms\Database\ElementRelationParamFilter should be used instead.craft\elements\db\NestedElementQueryInterface. CraftCms\Cms\Element\Queries\Contracts\NestedElementQueryInterface should be used instead.craft\elements\db\NestedElementQueryTrait. CraftCms\Cms\Element\Queries\Concerns\QueriesNestedElements should be used instead.craft\elements\db\OrderByPlaceholderExpression. CraftCms\Cms\Database\Expressions\OrderByPlaceholderExpression should be used instead.\craft\elements\db\AddressQuery. \CraftCms\Cms\Element\Queries\AddressQuery should be used instead.\craft\elements\db\AssetQuery \CraftCms\Cms\Element\Queries\AssetQuery should be used instead.\craft\elements\db\ContentBlockQuery \CraftCms\Cms\Element\Queries\ContentBlockQuery should be used instead.\craft\elements\db\ElementQuery \CraftCms\Cms\Element\Queries\ElementQuery should be used instead.\craft\elements\db\ElementQueryInterface\craft\elements\db\EntryQuery \CraftCms\Cms\Element\Queries\EntryQuery should be used instead.\craft\elements\db\UserQuery \CraftCms\Cms\Element\Queries\UserQuery should be used instead.GeneralConfig::$pageTrigger query parameter.craft\services\Entries. CraftCms\Cms\Entry\Entries and CraftCms\Cms\Entry\EntryTypes should be used instead.craft\models\EntryType. CraftCms\Cms\Entry\Data\EntryType should be used instead.craft\records\EntryType. CraftCms\Cms\Entry\Models\EntryType should be used instead.craft\records\Entry. CraftCms\Cms\Entry\Models\Entry should be used instead.craft\errors\EntryTypeNotFoundException. CraftCms\Cms\Entry\Exceptions\EntryTypeNotFoundException should be used instead.craft\events\EntryTypeEvent. One of these should be used instead:
craft\services\Entries::EVENT_BEFORE_DELETE_ENTRY_TYPE => CraftCms\Cms\Section\Events\DeletingEntryTypecraft\services\Entries::EVENT_BEFORE_APPLY_ENTRY_TYPE_DELETE => CraftCms\Cms\Entry\Events\ApplyingEntryTypeDeletecraft\services\Entries::EVENT_AFTER_DELETE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeDeletedcraft\services\Entries::EVENT_BEFORE_SAVE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeSavingcraft\services\Entries::EVENT_AFTER_SAVE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeSavedcraft\controllers\EntriesController. The following controllers now implement this functionality:
CraftCms\Cms\Http\Controllers\Entries\CreateEntryControllerCraftCms\Cms\Http\Controllers\Entries\EntriesIndexControllerCraftCms\Cms\Http\Controllers\Entries\MoveEntryToSectionControllerCraftCms\Cms\Http\Controllers\Entries\StoreEntryControllercraft\controllers\EntryTypesController in favor of CraftCms\Cms\Http\Controllers\EntryTypesControllercraft\console\controllers\EntryTypesController in favor of:
CraftCms\Cms\Entry\Commands\MergeEntryTypesCommandCraftCms\Cms\Component\Component base class, replacing Yii2's BaseObject/Component with config hydration, magic getters/setters, and Arrayable support.CraftCms\Cms\Component\Exceptions\InvalidCallException, replacing yii\base\InvalidCallException.CraftCms\Cms\Component\Exceptions\UnknownPropertyException, replacing yii\base\UnknownPropertyException.CraftCms\Cms\FieldLayout\FieldLayoutForm.CraftCms\Cms\FieldLayout\FieldLayoutFormTab.CraftCms\Cms\FieldLayout\FieldLayoutFormElement.CraftCms\Cms\FieldLayout\FieldLayoutServiceProvider.CraftCms\Cms\FieldLayout\Concerns\HasFieldLayout trait.craft\models\FieldLayout. CraftCms\Cms\FieldLayout\FieldLayout should be used instead.craft\models\FieldLayoutTab. CraftCms\Cms\FieldLayout\FieldLayoutTab should be used instead.craft\base\FieldLayoutComponent. CraftCms\Cms\FieldLayout\FieldLayoutComponent should be used instead.craft\base\FieldLayoutElement. CraftCms\Cms\FieldLayout\FieldLayoutElement should be used instead.craft\base\FieldLayoutProviderInterface. CraftCms\Cms\FieldLayout\Contracts\FieldLayoutProviderInterface should be used instead.craft\records\FieldLayout. CraftCms\Cms\FieldLayout\Models\FieldLayout should be used instead.craft\fieldlayoutelements\BaseField. CraftCms\Cms\FieldLayout\LayoutElements\BaseField should be used instead.craft\fieldlayoutelements\BaseNativeField. CraftCms\Cms\FieldLayout\LayoutElements\BaseNativeField should be used instead.craft\fieldlayoutelements\BaseUiElement. CraftCms\Cms\FieldLayout\LayoutElements\BaseUiElement should be used instead.craft\fieldlayoutelements\CustomField. CraftCms\Cms\FieldLayout\LayoutElements\CustomField should be used instead.craft\fieldlayoutelements\Heading. CraftCms\Cms\FieldLayout\LayoutElements\Heading should be used instead.craft\fieldlayoutelements\HorizontalRule. CraftCms\Cms\FieldLayout\LayoutElements\HorizontalRule should be used instead.craft\fieldlayoutelements\Html. CraftCms\Cms\FieldLayout\LayoutElements\Html should be used instead.craft\fieldlayoutelements\LineBreak. CraftCms\Cms\FieldLayout\LayoutElements\LineBreak should be used instead.craft\fieldlayoutelements\Markdown. CraftCms\Cms\FieldLayout\LayoutElements\Markdown should be used instead.craft\fieldlayoutelements\Template. CraftCms\Cms\FieldLayout\LayoutElements\Template should be used instead.craft\fieldlayoutelements\TextField. CraftCms\Cms\FieldLayout\LayoutElements\TextField should be used instead.craft\fieldlayoutelements\TextareaField. CraftCms\Cms\FieldLayout\LayoutElements\TextareaField should be used instead.craft\fieldlayoutelements\Tip. CraftCms\Cms\FieldLayout\LayoutElements\Tip should be used instead.craft\fieldlayoutelements\TitleField. CraftCms\Cms\FieldLayout\LayoutElements\TitleField should be used instead.craft\fieldlayoutelements\FullNameField. CraftCms\Cms\FieldLayout\LayoutElements\FullNameField should be used instead.craft\fieldlayoutelements\addresses\AddressField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\AddressField should be used instead.craft\fieldlayoutelements\addresses\CountryCodeField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\CountryCodeField should be used instead.craft\fieldlayoutelements\addresses\LabelField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\LabelField should be used instead.craft\fieldlayoutelements\addresses\LatLongField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\LatLongField should be used instead.craft\fieldlayoutelements\addresses\OrganizationField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\OrganizationField should be used instead.craft\fieldlayoutelements\addresses\OrganizationTaxIdField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\OrganizationTaxIdField should be used instead.craft\fieldlayoutelements\assets\AssetTitleField. CraftCms\Cms\FieldLayout\LayoutElements\assets\AssetTitleField should be used instead.craft\fieldlayoutelements\assets\AltField. CraftCms\Cms\FieldLayout\LayoutElements\assets\AltField should be used instead.craft\fieldlayoutelements\entries\EntryTitleField. CraftCms\Cms\FieldLayout\LayoutElements\Entries\EntryTitleField should be used instead.craft\fieldlayoutelements\users\UsernameField. CraftCms\Cms\FieldLayout\LayoutElements\Users\UsernameField should be used instead.craft\fieldlayoutelements\users\FullNameField. CraftCms\Cms\FieldLayout\LayoutElements\Users\FullNameField should be used instead.craft\fieldlayoutelements\users\EmailField. CraftCms\Cms\FieldLayout\LayoutElements\Users\EmailField should be used instead.craft\fieldlayoutelements\users\AffiliatedSiteField. CraftCms\Cms\FieldLayout\LayoutElements\Users\AffiliatedSiteField should be used instead.craft\fieldlayoutelements\users\PhotoField. CraftCms\Cms\FieldLayout\LayoutElements\Users\PhotoField should be used instead.craft\events\CreateFieldLayoutFormEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutFormCreating should be used instead.craft\events\DefineFieldLayoutCustomFieldsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutCustomFieldsResolving should be used instead.craft\events\DefineFieldLayoutElementsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutUIElementsResolving should be used instead.craft\events\DefineFieldLayoutFieldsEvent. CraftCms\Cms\FieldLayout\Events\NativeFieldsResolving should be used instead.craft\events\DefineShowFieldLayoutComponentInFormEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutComponentShowInFormResolving should be used instead.craft\events\DefineFieldActionsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutActionMenuItemsResolving should be used instead.GeneralConfig::$pageTrigger query parameter.craft\controllers\FieldsController in favor of CraftCms\Cms\Http\Controllers\FieldsController.craft\controllers\MatrixController. CraftCms\Cms\Http\Controllers\MatrixController should be used instead.craft\controllers\RelationalFieldsController. CraftCms\Cms\Http\Controllers\RelationalFieldsController should be used instead.craft\errors\InvalidFieldException. CraftCms\Cms\Field\Exceptions\InvalidFieldException should be used instead.craft\fields\data\ColorData. CraftCms\Cms\Field\Data\ColorData should be used instead.craft\fields\data\IconData. CraftCms\Cms\Field\Data\IconData should be used instead.craft\fields\data\JsonData. CraftCms\Cms\Field\Data\JsonData should be used instead.craft\fields\data\LinkData. CraftCms\Cms\Field\Data\LinkData should be used instead.craft\fields\data\MultiOptionsFieldData. CraftCms\Cms\Field\Data\MultiOptionsFieldData should be used instead.craft\fields\data\OptionData. CraftCms\Cms\Field\Data\OptionData should be used instead.craft\fields\data\SingleOptionFieldData. CraftCms\Cms\Field\Data\SingleOptionFieldData should be used instead.craft\fields\linktypes\Asset. CraftCms\Cms\Field\LinkTypes\Asset should be used instead.craft\fields\linktypes\BaseElementLinkType. CraftCms\Cms\Field\LinkTypes\BaseElementLinkType should be used instead.craft\fields\linktypes\BaseLinkType. CraftCms\Cms\Field\LinkTypes\BaseLinkType should be used instead.craft\fields\linktypes\BaseTextLinkType. CraftCms\Cms\Field\LinkTypes\BaseTextLinkType should be used instead.craft\fields\linktypes\Category. CraftCms\Cms\Field\LinkTypes\Category should be used instead.craft\fields\linktypes\Email. CraftCms\Cms\Field\LinkTypes\Email should be used instead.craft\fields\linktypes\Entry. CraftCms\Cms\Field\LinkTypes\Entry should be used instead.craft\fields\linktypes\Phone. CraftCms\Cms\Field\LinkTypes\Phone should be used instead.craft\fields\linktypes\Sms. CraftCms\Cms\Field\LinkTypes\Sms should be used instead.craft\fields\linktypes\Url. CraftCms\Cms\Field\LinkTypes\Url should be used instead.craft\fields\Addresses. CraftCms\Cms\Field\Addresses should be used instead.craft\fields\Assets. CraftCms\Cms\Field\Assets should be used instead.craft\fields\BaseOptionsField. CraftCms\Cms\Field\BaseOptionsField should be used instead.craft\fields\BaseRelationField. CraftCms\Cms\Field\BaseRelationField should be used instead.craft\fields\ButtonGroup. CraftCms\Cms\Field\ButtonGroup should be used instead.craft\fields\Categories. CraftCms\Cms\Field\Categories should be used instead.craft\fields\Checkboxes. CraftCms\Cms\Field\Checkboxes should be used instead.craft\fields\Color. CraftCms\Cms\Field\Color should be used instead.craft\fields\ContentBlock. CraftCms\Cms\Field\ContentBlock should be used instead.craft\fields\Country. CraftCms\Cms\Field\Country should be used instead.craft\fields\Date. CraftCms\Cms\Field\Date should be used instead.craft\fields\Dropdown. CraftCms\Cms\Field\Dropdown should be used instead.craft\fields\Email. CraftCms\Cms\Field\Email should be used instead.craft\fields\Entries. CraftCms\Cms\Field\Entries should be used instead.craft\fields\Icon. CraftCms\Cms\Field\Icon should be used instead.craft\fields\Json. CraftCms\Cms\Field\Json should be used instead.craft\fields\Lightswitch. CraftCms\Cms\Field\Lightswitch should be used instead.craft\fields\Link. CraftCms\Cms\Field\Link should be used instead.craft\fields\Matrix. CraftCms\Cms\Field\Matrix should be used instead.craft\fields\MissingField. CraftCms\Cms\Field\MissingField should be used instead.craft\fields\Money. CraftCms\Cms\Field\Money should be used instead.craft\fields\MultiSelect. CraftCms\Cms\Field\MultiSelect should be used instead.craft\fields\Number. CraftCms\Cms\Field\Number should be used instead.craft\fields\PlainText. CraftCms\Cms\Field\PlainText should be used instead.craft\fields\RadioButtons. CraftCms\Cms\Field\RadioButtons should be used instead.craft\fields\Range. CraftCms\Cms\Field\Range should be used instead.craft\fields\Table. CraftCms\Cms\Field\Table should be used instead.craft\fields\Tags. CraftCms\Cms\Field\Tags should be used instead.craft\fields\Time. CraftCms\Cms\Field\Time should be used instead.craft\fields\Url. CraftCms\Cms\Field\Url should be used instead.craft\fields\Users. CraftCms\Cms\Field\Users should be used instead.craft\services\Fields. CraftCms\Cms\Field\Fields should be used instead.craft\errors\InvalidSubpathException. CraftCms\Cms\Filesystem\Exceptions\InvalidSubpathException should be used instead.\craft\records\GqlSchema. \CraftCms\Cms\Gql\Models\GqlSchema should be used instead.\craft\records\GqlToken. \CraftCms\Cms\Gql\Models\GqlToken should be used instead.craft\config\GeneralConfig::$errorTemplatePrefix and craft\config\GeneralConfig::errorTemplatePrefix(). Configure Laravel's custom error pages instead.craft\filters\BasicHttpAuthLogin. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)craft\filters\BasicHttpAuthStatic. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)craft\filters\BasicHttpAuthTrait. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)craft\filters\Cors. Use Laravel's CORS settings instead. (see https://laravel.com/docs/12.x/routing#cors)craft\filters\Headers. Use Laravel middleware instead. (see https://laravel.com/docs/middleware)craft\filters\ConditionalFilterTrait.craft\filters\SiteFilterTrait.craft\filters\UtilityAccess.craft\controllers\AppController::actionLicensingIssues(). CraftCms\Cms\Http\Middleware\EnforceLicenses should be used instead.craft\controllers\AppController::actionHealthCheck(). CraftCms\Cms\Http\Controllers\App\HealthCheckController should be used instead.craft\controllers\AppController::actionGetCpAlerts() and actionShunCpAlert(). CraftCms\Cms\Http\Controllers\App\CpAlertsController should be used instead.craft\controllers\AppController::actionIconPickerOptions(). Use CraftCms\Cms\Http\Controllers\IconController::pickerOptions() instead.craft\controllers\AppController::actionSetLicenseShunCookie(). CraftCms\Cms\Http\Controllers\App\LicensesController::setShunCookie() should be used instead.craft\controllers\AppController::actionGetPluginLicenseInfo() and actionUpdatePluginLicense(). CraftCms\Cms\Http\Controllers\App\PluginsController should be used instead.craft\controllers\AppController::actionBrokenImage(). CraftCms\Cms\Http\Middleware\ShowBrokenImage should be used instead.craft\controllers\AppController::actionRenderElements() and actionRenderComponents(). CraftCms\Cms\Http\Controllers\App\RenderController should be used instead.craft\controllers\NotFoundController. Laravel's exception handling should be used instead.yii2-adapter\legacy\web\Application. The new \CraftCms\Cms\Http\Middleware\SetHeaders middleware handles this functionality.yii2-adapter\legacy\web\Application. The new \CraftCms\Cms\Http\Middleware\EnforceLicenses middleware handles this functionality.craft\controllers\AppController::actionTryEdition() and actionSwitchToLicensedEdition() in favor of CraftCms\Cms\Http\Controllers\EditionController.CraftCms\Cms\Email\Commands\SendTestMailCommand.CraftCms\Cms\Email\Mailables\CraftMailable, a base mailable class that automatically applies project config email settings (from, replyTo, mailer) with site-specific overrides.CraftCms\Cms\SystemMessage\Mailables\SystemMessageMailable.Craft::$app->getMailer(). Laravel mailers/drivers and CraftCms\Cms\SystemMessage\SystemMessages::mailable() should be used instead.craft\mail\Mailer. Laravel mailers/drivers and CraftCms\Cms\SystemMessage\SystemMessages::mailable() should be used instead.craft\helpers\MailerHelper. Laravel mail configuration and drivers should be used instead.craft\config\GeneralConfig::$testToEmailAddress and craft\config\GeneralConfig::testToEmailAddress(). Illuminate\Support\Facades\Mail::alwaysTo() should be used instead.craft\mail\Mailer::$template, craft\mail\Mailer::$siteOverrides, craft\models\MailSettings::$template, and craft\models\MailSettings::$siteOverrides. Laravel mailable views and environment-specific Laravel mailers should be used instead.projectConfig.email mail settings and mail transport adapter configuration in favor of Laravel's mail config and drivers.Craft and Yii's migrations have been removed in favor of Laravel migrations.
The php craft fields:merge and php craft entry-types:merge commands will now generate Laravel migrations.
craft\db\Migration. CraftCms\Cms\Database\Migration should be used instead.craft\db\MigrationManagercraft\helpers\MigrationHelper as it was deprecated since 4.0.0.craft\console\controllers\InstallController in favor of:
CraftCms\Cms\Console\Commands\InstallCommandCraftCms\Cms\Console\Commands\InstallCheckCommandcraft\console\controllers\MigrateController in favor of:
CraftCms\Cms\Database\Commands\MigrateCommandcraft\console\controllers\UpController in favor of:
CraftCms\Cms\Console\Commands\UpCommandCraftCms\Cms\Plugin\Plugin class is now a Laravel ServiceProvider which provides a new way to register components for your plugins.craft\services\Plugins. CraftCms\Cms\Plugin\Plugins should be used instead.craft\base\Plugin. CraftCms\Cms\Plugin\Plugin should be used instead.craft\base\PluginTrait.craft\base\PluginInterface. CraftCms\Cms\Plugin\Contracts\PluginInterface should be used instead.craft\errors\InvalidPluginException. CraftCms\Cms\Plugin\Exceptions\InvalidPluginException should be used instead.craft\errors\InvalidLicenseKeyException. CraftCms\Cms\Plugin\Exceptions\InvalidLicenseKeyException should be used instead.craft\controllers\PluginsController. Use CraftCms\Cms\Http\Controllers\PluginsController instead.craft\console\controllers\PluginController in favor of:
CraftCms\Cms\Plugin\Commands\DisableCommand -> php craft plugin:disableCraftCms\Cms\Plugin\Commands\EnableCommand -> php craft plugin:enableCraftCms\Cms\Plugin\Commands\InstallCommand -> php craft plugin:installCraftCms\Cms\Plugin\Commands\UninstallCommand -> php craft plugin:uninstallCraftCms\Cms\Plugin\Commands\ListCommand -> php craft plugin:listcraft\events\PluginEvent in favor of the following new events:
craft\base\Plugin::EVENT_BEFORE_SAVE_SETTINGS => CraftCms\Cms\Component\Events\ComponentEventcraft\base\Plugin::EVENT_AFTER_SAVE_SETTINGS => CraftCms\Cms\Component\Events\ComponentEventcraft\services\Plugins::EVENT_BEFORE_DISABLE_PLUGIN => CraftCms\Cms\Plugin\Events\PluginDisabling;craft\services\Plugins::EVENT_BEFORE_ENABLE_PLUGIN => CraftCms\Cms\Plugin\Events\PluginEnabling;craft\services\Plugins::EVENT_BEFORE_INSTALL_PLUGIN => CraftCms\Cms\Plugin\Events\PluginInstalling;craft\services\Plugins::EVENT_BEFORE_LOAD_PLUGINS => CraftCms\Cms\Plugin\Events\PluginsLoading;craft\services\Plugins::EVENT_BEFORE_SAVE_PLUGIN_SETTINGS => CraftCms\Cms\Plugin\Events\SavingPluginSettings;craft\services\Plugins::EVENT_BEFORE_UNINSTALL_PLUGIN => CraftCms\Cms\Plugin\Events\PluginUninstalling;craft\services\Plugins::EVENT_AFTER_DISABLE_PLUGIN => CraftCms\Cms\Plugin\Events\PluginDisabled;craft\services\Plugins::EVENT_AFTER_ENABLE_PLUGIN => CraftCms\Cms\Plugin\Events\PluginEnabled;craft\services\Plugins::EVENT_AFTER_INSTALL_PLUGIN => CraftCms\Cms\Plugin\Events\PluginInstalled;craft\services\Plugins::EVENT_AFTER_LOAD_PLUGINS => CraftCms\Cms\Plugin\Events\PluginsLoaded;craft\services\Plugins::EVENT_AFTER_SAVE_PLUGIN_SETTINGS => CraftCms\Cms\Plugin\Events\PluginSettingsSaved;craft\services\Plugins::EVENT_AFTER_UNINSTALL_PLUGIN => CraftCms\Cms\Plugin\Events\PluginUninstalled;Request::isPreview() macro for detecting preview requests via x-craft-preview or x-craft-live-preview parameters.Request::isCpRequest(), Request::isSiteRequest(), Request::isActionRequest(), Request::actionSegments(), Request::actionSegmentsToRoute(), Request::duplicateWithUri(), Request::getToken(), and Request::getSigned() macros.GeneralConfig::$pageTrigger query parameter rather than path-style pagination segments.CraftCms\Cms\Support\Security.CraftCms\Cms\Support\Facades\Security.CraftCms\Cms\Http\Middleware\AddLogContext.Craft::$app->getSecurity() in favor of Laravel's Hash and Crypt facades, or CraftCms\Cms\Support\Facades\Security.GeneralConfig::$blowfishHashCost in favor of Laravel's hashing.bcrypt.rounds config or the BCRYPT_ROUNDS environment variable.The craft\services\Updates internal service has been removed. CraftCms\Cms\Update\Updates should be used instead.
Moved the following controllers:
craft\controllers\ConfigSyncController => CraftCms\Cms\Http\Controllers\ConfigSyncControllercraft\controllers\InstallController => CraftCms\Cms\Http\Controllers\InstallControllercraft\controllers\MigrateController => CraftCms\Cms\Http\Controllers\MigrateControllercraft\controllers\PluginStoreController => CraftCms\Cms\Http\Controllers\PluginStore\PluginStoreControllercraft\controllers\PluginStore\InstallController => CraftCms\Cms\Http\Controllers\PluginStore\InstallControllercraft\controllers\PluginStore\RemoveController => CraftCms\Cms\Http\Controllers\PluginStore\RemoveControllercraft\controllers\UpdaterController => CraftCms\Cms\Http\Controllers\Updates\UpdaterControllercraft\controllers\UpdatesController => CraftCms\Cms\Http\Controllers\Updates\UpdatesControllercraft\console\controllers\UpdateController in favor of these commands:
CraftCms\Cms\Update\Commands\UpdateCommandCraftCms\Cms\Update\Commands\ComposerInstallCommandCraftCms\Cms\Update\Commands\InfoCommandcraft\helpers\Install. CraftCms\Cms\Site\Concerns\SiteDefaults should be used instead.craft\helpers\Update. The only method was checkPhpConstraint which is now available on CraftCms\Cms\Support\PHP::checkConstraint()craft\events\UpdateReleaseEvent in favor of CraftCms\Cms\Update\Events\CriticalUpdateReleasedEventcraft\models\Update. CraftCms\Cms\Update\Data\Update should be used instead.craft\models\UpdateRelease. CraftCms\Cms\Update\Data\UpdateRelease should be used instead.craft\models\Updates. CraftCms\Cms\Update\Data\Updates should be used instead.craft\console\controllers\UsersController in favor of the following commands (signatures are the same):
CraftCms\Cms\User\Commands\ActivationUrlCommandCraftCms\Cms\User\Commands\CreateCommandCraftCms\Cms\User\Commands\DeleteCommandCraftCms\Cms\User\Commands\ImpersonateCommandCraftCms\Cms\User\Commands\ListAdminsCommandCraftCms\Cms\User\Commands\LogoutAllCommandCraftCms\Cms\User\Commands\PasswordResetUrlCommandCraftCms\Cms\User\Commands\Remove2faCommandCraftCms\Cms\User\Commands\SetPasswordCommandCraftCms\Cms\User\Commands\UnlockCommandcraft\services\ProjectConfig. CraftCms\Cms\ProjectConfig\ProjectConfig should be used instead.craft\controllers\ProjectConfigController in favor of CraftCms\Cms\Http\Controllers\Utilities\ProjectConfigControllercraft\console\controllers\PcController & craft\console\controllers\ProjectConfigController in favor of the following commands:
CraftCms\Cms\ProjectConfig\Commands\ApplyCommandCraftCms\Cms\ProjectConfig\Commands\DiffCommandCraftCms\Cms\ProjectConfig\Commands\ExportCommandCraftCms\Cms\ProjectConfig\Commands\GetCommandCraftCms\Cms\ProjectConfig\Commands\RebuildCommandCraftCms\Cms\ProjectConfig\Commands\RemoveCommandCraftCms\Cms\ProjectConfig\Commands\SetCommandCraftCms\Cms\ProjectConfig\Commands\TouchCommandCraftCms\Cms\ProjectConfig\Commands\WriteCommandphp craft project-config or php craft pccraft\events\ConfigEvent in favor of the following events:
CraftCms\Cms\ProjectConfig\Events\ProjectConfigItemAddingCraftCms\Cms\ProjectConfig\Events\ItemAddedCraftCms\Cms\ProjectConfig\Events\ProjectConfigItemUpdatedCraftCms\Cms\ProjectConfig\Events\ItemUpdatedCraftCms\Cms\ProjectConfig\Events\ProjectConfigItemRemovedCraftCms\Cms\ProjectConfig\Events\ItemRemovedcraft\services\ProjectConfig::EVENT_AFTER_APPLY_CHANGES
CraftCms\Cms\ProjectConfig\Events\ChangesAppliedcraft\services\ProjectConfig::EVENT_AFTER_WRITE_YAML_FILESCraftCms\Cms\ProjectConfig\Events\YamlFilesWrittencraft\services\ProjectConfig::EVENT_REBUILD
CraftCms\Cms\ProjectConfig\Events\ProjectConfigRebuiltcraft\errors\BusyResourceException in favor of CraftCms\Cms\ProjectConfig\Exceptions\BusyResourceExceptioncraft\errors\StaleResourceException in favor of CraftCms\Cms\ProjectConfig\Exceptions\StaleResourceExceptionCraftCms\Cms\ProjectConfig\Exceptions\ReadonlyExceptioncraft\models\ProjectConfigData in favor of CraftCms\Cms\ProjectConfig\Data\ProjectConfigDatacraft\models\ReadOnlyProjectConfigData in favor of CraftCms\Cms\ProjectConfig\Data\ReadOnlyProjectConfigDatacraft\helpers\ProjectConfig. CraftCms\Cms\ProjectConfig\ProjectConfigHelper should be used instead.craft\services\Revisions. CraftCms\Cms\Element\Revisions should be used instead.craft\events\RevisionEvent. One of the events extending CraftCms\Cms\Element\Events\RevisionEvent should be used instead.craft\behaviors\RevisionBehavior. CraftCms\Cms\Element\Concerns\Revisionable should be used instead.craft\services\Routes. CraftCms\Cms\Route\Routes should be used instead.config/routes.php is no longer supported. Register routes using Laravel's routing instead.CraftCms\Cms\Support\Facades\Search.craft\services\Search. CraftCms\Cms\Search\Search should be used instead.Craft::$app->getSearch(). CraftCms\Cms\Support\Facades\Search or app(CraftCms\Cms\Search\Search::class) should be used instead.craft\search\SearchQuery. CraftCms\Cms\Search\SearchQuery should be used instead.craft\search\SearchQueryTerm. CraftCms\Cms\Search\SearchQueryTerm should be used instead.craft\search\SearchQueryTermGroup. CraftCms\Cms\Search\SearchQueryTermGroup should be used instead.craft\events\SearchEvent in favor of the following new events:
craft\services\Search::EVENT_BEFORE_SEARCH => CraftCms\Cms\Search\Events\SearchStartingcraft\services\Search::EVENT_AFTER_SEARCH => CraftCms\Cms\Search\Events\SearchPerformedcraft\services\Search::EVENT_BEFORE_SCORE_RESULTS => CraftCms\Cms\Search\Events\ScoringResultscraft\events\IndexKeywordsEvent. CraftCms\Cms\Search\Events\KeywordsIndexing should be used instead.GeneralConfig::$pageTrigger query parameter.craft\services\Entries. CraftCms\Cms\Section\Sections should be used instead.craft\models\Section. CraftCms\Cms\Section\Data\Section should be used instead.craft\records\Section. CraftCms\Cms\Section\Models\Section should be used instead.craft\models\Section_SiteSettings. CraftCms\Cms\Section\Data\SectionSiteSettings should be used instead.craft\records\Section_SiteSettings. CraftCms\Cms\Section\Models\SectionSiteSettings should be used instead.craft\events\SectionEvent. One of these should be used instead:
craft\services\Entries::EVENT_BEFORE_DELETE_SECTION => CraftCms\Cms\Section\Events\SectionDeletingcraft\services\Entries::EVENT_BEFORE_APPLY_SECTION_DELETE => CraftCms\Cms\Section\Events\SectionDeletionApplyingcraft\services\Entries::EVENT_AFTER_DELETE_SECTION => CraftCms\Cms\Section\Events\SectionDeletedcraft\services\Entries::EVENT_BEFORE_SAVE_SECTION => CraftCms\Cms\Section\Events\SectionSavingcraft\services\Entries::EVENT_AFTER_SAVE_SECTION => CraftCms\Cms\Section\Events\SectionSavedcraft\controllers\SectionsController in favor of CraftCms\Cms\Http\Controllers\SectionsControllercraft\console\controllers\SectionsController in favor of:
CraftCms\Cms\Section\Commands\CreateCommandCraftCms\Cms\Section\Commands\DeleteCommandCraftCms\Cms\Section\Enums\DefaultPlacementCraftCms\Cms\Section\Enums\SectionTypecraft\errors\SectionNotFoundException. CraftCms\Cms\Section\Exceptions\SectionNotFoundException should be used instead.Deprecated craft\services\Sites. CraftCms\Cms\Site\Sites should be used instead.
Deprecated craft\models\Site. CraftCms\Cms\Site\Data\Site should be used instead.
Deprecated craft\models\SiteGroup. CraftCms\Cms\Site\Data\SiteGroup should be used instead.
Deprecated craft\records\Site. CraftCms\Cms\Site\Models\Site should be used instead.
Deprecated craft\records\SiteGroup. CraftCms\Cms\Site\Models\SiteGroup should be used instead.
Deprecated craft\events\SiteEvent. One of CraftCms\Cms\Site\Events\* should be used instead.
Deprecated craft\events\DeleteSiteEvent. One of CraftCms\Cms\Site\Events\SiteDeleting or CraftCms\Cms\Site\Events\SiteDeleted should be used instead.
Deprecated craft\events\ReorderSitesEvent. One of CraftCms\Cms\Site\Events\SitesReordering or CraftCms\Cms\Site\Events\SitesReordered should be used instead.
Deprecated craft\events\SiteGroupEvent. One of CraftCms\Cms\Site\Events\* should be used instead.
Deprecated craft\errors\SiteNotFoundException. CraftCms\Cms\Site\Exceptions\SiteNotFoundException should be used instead.
Deprecated craft\errors\SiteGroupNotFoundException.
Removed craft\controllers\SitesController in favor of:
CraftCms\Cms\Http\Controllers\Settings\SitesControllerCraftCms\Cms\Http\Controllers\Settings\SiteGroupsControllercraft\services\Structures. CraftCms\Cms\Structure\Structures should be used instead.craft\models\Structure. CraftCms\Cms\Structure\Data\Structure should be used instead.craft\records\Structure. CraftCms\Cms\Structure\Models\Structure should be used instead.craft\records\StructureElement. CraftCms\Cms\Structure\Models\StructureElement should be used instead.craft\controllers\StructuresController. CraftCms\Cms\Http\Controllers\StructuresController.craft\console\controllers\RepairController with:
\CraftCms\Cms\Structure\Commands\RepairCategoryGroupStructureCommand\CraftCms\Cms\Structure\Commands\RepairSectionStructureCommandcraft\services\SystemMessages. CraftCms\Cms\SystemMessage\SystemMessages should be used instead.craft\models\SystemMessage and craft\records\SystemMessage. CraftCms\Cms\SystemMessage\Models\SystemMessage should be used instead.craft\controllers\SystemMessagesController with CraftCms\Cms\Http\Controllers\Utilities\SystemMessagesControllercraft\services\Tokens. CraftCms\Cms\RouteToken\RouteTokens should be used instead.craft\records\Token. CraftCms\Cms\RouteToken\Models\RouteToken should be used instead.{% paginate %} queries to use Laravel paginators and generate query-string pagination URLs based on GeneralConfig::$pageTrigger.CraftCms\Cms\Twig\Twig service for managing Twig environments, replacing the Twig management logic previously in craft\web\View.CraftCms\Cms\Twig\TemplateRenderer for rendering templates, replacing the rendering logic previously in craft\web\View.CraftCms\Cms\Twig\PageLifecycle for managing the page rendering lifecycle (head/body placeholder replacement), replacing the page lifecycle logic previously in craft\web\View.CraftCms\Cms\Support\Facades\Twig facade, resolving to CraftCms\Cms\Twig\TemplateRenderer.CraftCms\Cms\Twig\Environment, moved from craft\web\twig\Environment.CraftCms\Cms\Twig\TemplateResolver.CraftCms\Cms\Twig\TemplateLoader.CraftCms\Cms\Twig\Exceptions\TemplateLoaderException.CraftCms\Cms namespace: template(), sandboxedTemplate(), pageTemplate(), renderString(), renderSandboxedString(), renderObjectTemplate(), renderSandboxedObjectTemplate().sanitize Twig filter for sanitizing HTML with CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers.craft\web\View::getTwig(). CraftCms\Cms\Twig\Twig::get() should be used instead.craft\web\View::setTwig(). CraftCms\Cms\Twig\Twig::set() should be used instead.craft\web\View::createTwig(). CraftCms\Cms\Twig\Twig::create() should be used instead.craft\web\View::registerCpTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.craft\web\View::registerSiteTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.craft\web\View::registerTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.craft\web\View::renderTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderTemplate() or the template() helper should be used instead.craft\web\View::renderSandboxedTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedTemplate() or the sandboxedTemplate() helper should be used instead.craft\web\View::renderPageTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderPageTemplate() or the pageTemplate() helper should be used instead.craft\web\View::renderString(). CraftCms\Cms\Twig\TemplateRenderer::renderString() or the renderString() helper should be used instead.craft\web\View::renderSandboxedString(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedString() or the renderSandboxedString() helper should be used instead.craft\web\View::renderObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderObjectTemplate() or the renderObjectTemplate() helper should be used instead.craft\web\View::renderSandboxedObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedObjectTemplate() or the renderSandboxedObjectTemplate() helper should be used instead.craft\web\View::normalizeObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::normalizeObjectTemplate() should be used instead.craft\web\View::getIsRenderingTemplate(). CraftCms\Cms\Twig\TemplateRenderer::isRenderingTemplate should be used instead.craft\web\View::getIsRenderingPageTemplate(). CraftCms\Cms\Twig\TemplateRenderer::isRenderingPageTemplate should be used instead.craft\web\twig\Environment. CraftCms\Cms\Twig\Environment should be used instead.craft\web\View::EVENT_AFTER_CREATE_TWIG. CraftCms\Cms\Twig\Events\TwigCreated should be used instead.craft\web\View::doesTemplateExist(). CraftCms\Cms\Twig\TemplateResolver::doesTemplateExist() should be used instead.craft\web\View::resolveTemplate(). CraftCms\Cms\Twig\TemplateResolver::resolveTemplate() should be used instead.craft\web\twig\TemplateLoader. CraftCms\Cms\Twig\TemplateLoader should be used instead.craft\web\twig\TemplateLoaderException. CraftCms\Cms\Twig\Exceptions\TemplateLoaderException should be used instead.CraftCms\Cms\Twig\Events\TwigCreated, dispatched when a Twig environment is created.CraftCms\Cms\Twig\Events\TemplateRendering, dispatched before a template is rendered. Supports cancellation via ValidatableEvent.CraftCms\Cms\Twig\Events\TemplateRendered, dispatched after a template is rendered. Has a mutable output property.CraftCms\Cms\Twig\Events\PageTemplateRendering, dispatched before a page template is rendered. Supports cancellation via ValidatableEvent.CraftCms\Cms\Twig\Events\PageTemplateRendered, dispatched after a page template is rendered. Has a mutable output property.CraftCms\Cms\Twig\Events\PageStarting, dispatched when page rendering begins.CraftCms\Cms\Twig\Events\PageEnded, dispatched when page rendering ends. Has nullable headHtml, bodyBeginHtml, and bodyEndHtml properties for overriding HtmlStack output.craft\web\View::EVENT_BEFORE_RENDER_TEMPLATE. CraftCms\Cms\Twig\Events\TemplateRendering should be used instead.craft\web\View::EVENT_AFTER_RENDER_TEMPLATE. CraftCms\Cms\Twig\Events\TemplateRendered should be used instead.craft\web\View::EVENT_BEFORE_RENDER_PAGE_TEMPLATE. CraftCms\Cms\Twig\Events\PageTemplateRendering should be used instead.craft\web\View::EVENT_AFTER_RENDER_PAGE_TEMPLATE. CraftCms\Cms\Twig\Events\PageTemplateRendered should be used instead.craft\i18n\FormatConverter. CraftCms\Cms\Translation\FormatConverter should be used instead.craft\i18n\Formatter. CraftCms\Cms\Translation\Formatter should be used instead.craft\i18n\I18N. CraftCms\Cms\Translation\I18N should be used instead.craft\i18n\Locale. CraftCms\Cms\Translation\Locale should be used instead.craft\i18n\MessageFormatter.craft\i18n\PhpMessageSource.craft\i18n\Translation. CraftCms\Cms\Support\Facades\I18N should be used instead.Craft::t. CraftCms\Cms\t should be used instead.CraftCms\Cms\User\Elements\User now implements Illuminate\Contracts\Auth\Authenticatable, Illuminate\Contracts\Auth\Access\Authorizable, Illuminate\Contracts\Auth\CanResetPassword, and Illuminate\Contracts\Auth\MustVerifyEmail.CraftCms\Cms\User\Notifications\VerifyEmailNotification.Users::purgeExpiredPendingUsers() now joins the password_reset_tokens table to find expired pending users.verificationCode and verificationCodeIssuedDate columns on the users table in favor of the password_reset_tokens table.craft\services\Users::isVerificationCodeValidForUser(). Password::broker('craft')->tokenExists($user, $code) should be used instead.craft\controllers\UsersController in favor of:
CraftCms\Cms\Http\Controllers\Users\ActivateController.CraftCms\Cms\Http\Controllers\Users\PasswordController.CraftCms\Cms\Http\Controllers\Users\SaveUserController.\craft\controllers\UserSettingsController in favor of:
CraftCms\Cms\Http\Controllers\Settings\UserGroupsControllerCraftCms\Cms\Http\Controllers\Settings\UserSettingsControllerUserGroupEvent in favor of:
CraftCms\Cms\User\Events\UserGroupSavingCraftCms\Cms\User\Events\UserGroupSavedCraftCms\Cms\User\Events\UserGroupDeletionApplyingCraftCms\Cms\User\Events\UserGroupDeletingCraftCms\Cms\User\Events\UserGroupDeleted\craft\exceptions\UserGroupNotFoundException.\craft\services\UserGroups. CraftCms\Cms\User\UserGroups should be used instead.\craft\models\UserGroup. CraftCms\Cms\User\Data\UserGroup should be used instead.\craft\records\User. \CraftCms\Cms\User\Models\User should be used instead.\craft\records\UserGroup. \CraftCms\Cms\User\Models\UserGroup should be used instead.\craft\records\UserPermission. \CraftCms\Cms\User\Models\UserPermission should be used instead.craft\services\UserPermissions. CraftCms\Cms\User\UserPermissions should be used instead.craft.app.userPermissions. craft.userPermissions should be used instead.craft\events\DefineEditUserScreensEvent. CraftCms\Cms\User\Events\EditUserScreensResolving should be used instead.CraftCms\Cms\View\TwigEngine.CraftCms\Cms\View\HtmlStack.CraftCms\Cms\Support\Facades\HtmlStack.CraftCms\Cms\View\Enums\Position enum.CraftCms\Cms\View\InputNamespace.CraftCms\Cms\Support\Facades\InputNamespace.CraftCms\Cms\View\TemplateHooks.CraftCms\Cms\Support\Facades\TemplateHooks.CraftCms\Cms\View\DeltaRegistry.CraftCms\Cms\Support\Facades\DeltaRegistry.CraftCms\Cms\View\TemplateMode enum.CraftCms\Cms\View\Events\CpTemplateRootsResolving.CraftCms\Cms\View\Events\SiteTemplateRootsResolving.CraftCms\Cms\View\TemplateCaches.CraftCms\Cms\View\CacheCollectors\DependencyCollector.CraftCms\Cms\View\CacheCollectors\ResourceCollector.CraftCms\Cms\View\Contracts\CacheCollectorInterface.CraftCms\Cms\View\Data\TemplateCacheContext.CraftCms\Cms\View\Events\TemplateCacheCollectorsResolving.craft\services\TemplateCaches. CraftCms\Cms\View\TemplateCaches should be used instead.craft\web\View::registerJs(). CraftCms\Cms\View\HtmlStack::js() should be used instead.craft\web\View::registerJsWithVars(). CraftCms\Cms\View\HtmlStack::jsWithVars() should be used instead.craft\web\View::registerJsFile(). CraftCms\Cms\View\HtmlStack::jsFile() should be used instead.craft\web\View::registerCss(). CraftCms\Cms\View\HtmlStack::css() should be used instead.craft\web\View::registerCssFile(). CraftCms\Cms\View\HtmlStack::cssFile() should be used instead.craft\web\View::registerScript(). CraftCms\Cms\View\HtmlStack::script() should be used instead.craft\web\View::registerScriptWithVars(). CraftCms\Cms\View\HtmlStack::scriptWithVars() should be used instead.craft\web\View::registerHtml(). CraftCms\Cms\View\HtmlStack::html() should be used instead.craft\web\View::registerMetaTag(). CraftCms\Cms\View\HtmlStack::metaTag() should be used instead.craft\web\View::registerLinkTag(). CraftCms\Cms\View\HtmlStack::linkTag() should be used instead.craft\web\View::registerTranslations(). CraftCms\Cms\View\HtmlStack::translations() should be used instead.craft\web\View::registerJsImport(). CraftCms\Cms\View\HtmlStack::jsImport() should be used instead.craft\web\View::registerIcons(). CraftCms\Cms\View\HtmlStack::icons() should be used instead.craft\web\View::startJsBuffer(). CraftCms\Cms\View\HtmlStack::startJsBuffer() should be used instead.craft\web\View::clearJsBuffer(). CraftCms\Cms\View\HtmlStack::clearJsBuffer() should be used instead.craft\web\View::startScriptBuffer(). CraftCms\Cms\View\HtmlStack::startScriptBuffer() should be used instead.craft\web\View::clearScriptBuffer(). CraftCms\Cms\View\HtmlStack::clearScriptBuffer() should be used instead.craft\web\View::startCssBuffer(). CraftCms\Cms\View\HtmlStack::startCssBuffer() should be used instead.craft\web\View::clearCssBuffer(). CraftCms\Cms\View\HtmlStack::clearCssBuffer() should be used instead.craft\web\View::startCssFileBuffer(). CraftCms\Cms\View\HtmlStack::startCssFileBuffer() should be used instead.craft\web\View::clearCssFileBuffer(). CraftCms\Cms\View\HtmlStack::clearCssFileBuffer() should be used instead.craft\web\View::startJsFileBuffer(). CraftCms\Cms\View\HtmlStack::startJsFileBuffer() should be used instead.craft\web\View::clearJsFileBuffer(). CraftCms\Cms\View\HtmlStack::clearJsFileBuffer() should be used instead.craft\web\View::startHtmlBuffer(). CraftCms\Cms\View\HtmlStack::startHtmlBuffer() should be used instead.craft\web\View::clearHtmlBuffer(). CraftCms\Cms\View\HtmlStack::clearHtmlBuffer() should be used instead.craft\web\View::startMetaTagBuffer(). CraftCms\Cms\View\HtmlStack::startMetaTagBuffer() should be used instead.craft\web\View::clearMetaTagBuffer(). CraftCms\Cms\View\HtmlStack::clearMetaTagBuffer() should be used instead.craft\web\View::startJsImportBuffer(). CraftCms\Cms\View\HtmlStack::startJsImportBuffer() should be used instead.craft\web\View::clearJsImportBuffer(). CraftCms\Cms\View\HtmlStack::clearJsImportBuffer() should be used instead.craft\web\View::getNamespace(). CraftCms\Cms\View\InputNamespace::get() should be used instead.craft\web\View::setNamespace(). CraftCms\Cms\View\InputNamespace::set() should be used instead.craft\web\View::namespaceInputs(). CraftCms\Cms\View\InputNamespace::namespaceInputs() should be used instead.craft\web\View::namespaceInputName(). CraftCms\Cms\View\InputNamespace::namespaceInputName() should be used instead.craft\web\View::namespaceInputId(). CraftCms\Cms\View\InputNamespace::namespaceInputId() should be used instead.craft\web\View::TEMPLATE_MODE_CP. CraftCms\Cms\View\TemplateMode::Cp should be used instead.craft\web\View::TEMPLATE_MODE_SITE. CraftCms\Cms\View\TemplateMode::Site should be used instead.craft\web\View::getTemplateMode(). CraftCms\Cms\View\TemplateMode::get() should be used instead.craft\web\View::setTemplateMode(). CraftCms\Cms\View\TemplateMode::set() should be used instead.craft\web\View::getTemplatesPath(). CraftCms\Cms\View\TemplateMode::templatesPath() should be used instead.craft\web\View::getCpTemplateRoots(). CraftCms\Cms\View\TemplateMode::templateRoots() should be used instead.craft\web\View::getSiteTemplateRoots(). CraftCms\Cms\View\TemplateMode::templateRoots() should be used instead.craft\web\View::EVENT_REGISTER_CP_TEMPLATE_ROOTS. CraftCms\Cms\View\Events\CpTemplateRootsResolving should be used instead.craft\web\View::EVENT_REGISTER_SITE_TEMPLATE_ROOTS. CraftCms\Cms\View\Events\SiteTemplateRootsResolving should be used instead.craft\web\View::registerDeltaName(). CraftCms\Cms\View\DeltaRegistry::registerName() should be used instead.craft\web\View::getDeltaNames(). CraftCms\Cms\View\DeltaRegistry::getNames() should be used instead.craft\web\View::getModifiedDeltaNames(). CraftCms\Cms\View\DeltaRegistry::getModifiedNames() should be used instead.craft\web\View::setInitialDeltaValue(). CraftCms\Cms\View\DeltaRegistry::setInitialValue() should be used instead.craft\web\View::getInitialDeltaValues(). CraftCms\Cms\View\DeltaRegistry::getInitialValues() should be used instead.craft\web\View::getIsDeltaRegistrationActive(). CraftCms\Cms\View\DeltaRegistry::isActive() should be used instead.craft\web\View::setIsDeltaRegistrationActive(). CraftCms\Cms\View\DeltaRegistry::setActive() should be used instead.craft\web\View::hook(). CraftCms\Cms\View\TemplateHooks::register() should be used instead.craft\web\View::invokeHook(). CraftCms\Cms\View\TemplateHooks::invoke() should be used instead.composer.json were getting updated when installing/updating plugins. (#18755)composer.json were getting updated when installing/updating plugins. (#18755)resourceBasePath and resourceBaseUrl config settings weren’t being respected for console requests. (#18685)*Interface type condition. (#18708)id param was overridden. (#15570)eagerly(). (#18693)create() Twig function. (#18376)craft\helpers\ProjectConfig::pathDepth().craft\services\Fields::deleteLayout() and deleteLayoutById() now have $hardDelete arguments.craft\services\ProjectConfig::getPendingChangeSummary().entrify/global-set command. (#18650)craft\fields\data\JsonData objects from Twig. (#18656)craft\controllers\ElementIndexesController::$fieldLayouts.craft\services\ElementSources::getTableAttributes() now has a $fieldLayouts argument.aria-activedescendant, aria-flowto, and aria-owns attributes weren’t getting namespaced by {% namespace %} tags. (#18577)enabled values were being treated as enabled. (#18572)on EntryInterface) rather than a specific type name. (#18588)loginPath, logoutPath, setPasswordPath, or verifyEmailPath config settings were set to a callable that called the sites service. (#18605)aria-activedescendant, aria-flowto, and aria-owns attributes weren’t getting namespaced by {% namespace %} tags. (#18577)craft\helpers\DateTimeHelper::testTimeToSeconds().utils/fix-field-layout-uids command. (#18516)craft\filters\SiteFilterTrait.authorGroup params with and or not operators wasn’t working properly. (#18551)gc command, if a Matrix field had been converted to an Addresses or Content Block field. (#18549)craft\web\AssetManager::$cacheSourcePaths disabled. (#18536)craft\fields\data\LinkData::getUrl() was returning the URL suffix rather than an empty string, if the rendered base URL was an empty string.craft\web\AssetManager::$cacheSourcePaths disabled. (#18536)craft\filters\IpRateLimitIdentity. (#18510)craft\helpers\App::resourcePathByUri().users/suspend-user and users/unsuspend-user actions required that the logged-in user have control panel access. (#18485)width and height attributes weren’t getting them set as expected.target="_blank" added to them. (#18500)resave commands. (#18453)craft\helpers\UrlHelper::cpReferralUrl() was returning the referrer URL even if it had the same URI as the current page. (#18483)craft\filters\IpRateLimitIdentity. (#18510)craft\helpers\App::resourcePathByUri().users/suspend-user and users/unsuspend-user actions required that the logged-in user have control panel access. (#18485)width and height attributes weren’t getting them set as expected.target="_blank" added to them. (#18500)PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is no longer set by default for database connections. (#18474)craft\elements\Entry::canMove().PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is no longer set by default for database connections. (#18474)PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is now set to false by default for database connections.searchindex and searchindexqueue rows weren’t being deleted when an element was deleted for a site. (#18394)craft\helpers\App::parseEnv() was returning null instad of an empty string, when an environment variable name was passed in, which was set to an empty string.PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is now set to false by default for database connections.searchindex and searchindexqueue rows weren’t being deleted when an element was deleted for a site. (#18394)How can I help you explore Laravel packages today?