Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Cms Laravel Package

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.

View on GitHub
Deep Wiki
Context7
6.0.0-alpha.5
  • Improved emoji shortcode handling performance for strings without shortcode delimiters.
  • Improved element query performance by caching element source table column listings in memory.
  • Improved nested entry type resolution by avoiding unnecessary owner element queries.
  • Added Laravel event dispatching to Craft’s Yiisoft\Translator\Translator instance, enabling Yiisoft\Translator\Event\MissingTranslationEvent listeners. (#18952)
  • The loginPath config setting is now false by default.
  • Renamed the PluginsLoaded event to PluginsRegistered. (#18973)
  • Updated Twig to 3.27. (#18980)
  • Fixed some errors that could occur when running Craft through Laravel Octane (#18921)
  • Fixed an error that occurred when rendering the database update screen outside Control Panel template mode.
  • Fixed an error that occurred when Redis was configured as the session driver.
  • Fixed a bug where legacy Control Panel URL rules couldn’t route directly to templates. (#18972)
  • Fixed an error that could occur when request context was dehydrated after a matched element route was resolved.
  • Fixed a bug where CraftCms\Cms\Support\Typecast could skip setters that used a same-name private backing property.
  • Fixed a bug where CraftCms\Cms\Support\Typecast could attempt to assign read-only, private-set, protected-set, or setterless virtual properties.
  • Fixed a bug where publishable Craft assets were registered during web requests.
  • Fixed a bug where eager-loading didn’t treat address, content block, and entry queries as nested element queries.
  • Fixed a bug where lazy eager-loading nested element fields could reuse owner criteria and return the wrong elements.
  • Fixed an error that occurred when Updates were cached and deserialized.
  • Fixed an error that prevented link fields from saving.
  • Fixed a bug where Money fields could throw an error during element validation when the field value was falsy.
  • Fixed a bug where CraftCms\Cms\Validation\Contracts\Validatable::prepareForValidation() wasn’t called consistently, and plain Validatable classes without a configured ruleset couldn’t be validated. (#18944)
  • Fixed a bug where invalid element query filters could return all results. (#18937)
  • Fixed an error that occurred when uploading assets to fields with dynamic default upload locations. (#18949)
  • Fixed a bug where Craft could look for the license key in config/license.key instead of config/craft/license.key.
  • Fixed a styling issue that occurred when editable table cells had a code class. (#18900)
5.10.4
  • Updated Twig to 3.27. (#18980)
  • Fixed a bug where an empty storage/runtime/ directory was getting created even if runtimePath was being overridden in config/app.php. (#18936)
  • Fixed a bug where overridden entry type handles weren’t being respected when rendering partial templates. (#18968)
  • Fixed an error that could occur when opening an element slideout. (#18957)
  • Fixed a bug where HTML Purifier was stripping out IDs and ID references that included characters that weren’t allowed pre-HTML5. (#18971)
5.10.3
  • Reduced the number of database queries executed when eager-loading nested entries or addresses. (#18929)
  • Reduced the number of database queries executed when loading image transforms. (#18929)
  • Deprecated craft\services\Path::getRuntimePath(). Craft::$app->getRuntimePath() should be called instead.
  • Fixed a bug where Single section entries weren’t initially saved with a post date. (#18931)
  • Fixed a bug where overriding the runtime path via config/app.php wasn’t possible. (#18936)
  • Fixed a bug where pasted nested entries within Matrix fields in Blocks view weren’t always getting fully initialized. (#18912)
  • Fixed a bug where collapsed Matrix blocks were getting “Entry [ID]” preview values if their entry type didn’t have a UI Label. (#18484)
  • Fixed a bug where nested elements could be deleted when reverting content from a revision. (#18950)
  • Fixed a styling issue.
  • Fixed a moderate-severity authorization bypass vulnerability.
  • Fixed a low-severity authorization bypass vulnerability.
4.18.1
  • Fixed a bug where some element index actions weren’t working. (#18938)
  • Fixed a moderate-severity authorization bypass vulnerability.
  • Fixed a low-severity authorization bypass vulnerability.
5.10.2
  • Updated Twig to 3.26. (#18924, #18926)
  • Fixed a bug where editable tables registered unexpected debug toolbar output. (#18895, #18902)
  • Fixed a JavaScript error that occurred when pasting nested entries within Matrix fields in Blocks view. (#18912)
  • Fixed an error that could occur when editing elements on Apache servers. (#18923)
6.0.0-alpha.4
  • Added support for plugins to register Laravel scheduled tasks that run via php artisan schedule:run.
  • Updated yiisoft/html to 4.1.0. (#18920)
  • Updated elvanto/litemoji to 5.2.0. (#18917)
  • Updated pragmarx/google2fa to 9.0.0. (#18919)
  • Fixed an error that occurred when opening element selector modals with string sources values. (#18915)
  • Added “Elements” and “Deprecations” panels to Laravel Debugbar. (#18897)
  • Fixed a bug where legacy redirect responses were not being returned as a redirect (#18893)
  • Fixed an error that could occur when saving filesystems with null transient settings. (#18909)
  • Fixed a bug where plugin routes were not being registered with the web middleware.
  • Fixed an error that could occur when storing image transform indexes. (#18899)
  • Fixed an error when loginPath or logoutPath was set to false in GeneralConfig. (#18894)
  • Fixed a bug where plugin-registered Twig variables weren’t available via the craft template variable. (#18903)
  • Fixed an error that occurred when using the legacy cache service with a new dependency object (#18904)
  • Fixed a bug where clearing submitted values could retain the previous value. (#18905)
  • Fixed a bug where a legacy Yii action controller would result in a 404 when returning null as the response (#18907)
  • Fixed an error that could occur because ol and ul were not normalizing the attributes (#18907)
  • Fixed an error that occurred when trying to upload an asset through a legacy filesystem plugin (#18908)
6.0.0-alpha.3
  • Added the compiledTemplatesPath config setting. (#18861)
  • Added a missing migration that adds minAuthors to the section table (#18875)
  • Fixed a bug where the cpTrigger would be appended twice to the URL after running migrations from the control panel. (#18858)
  • Fixed an error that occurred when rendering element indexes with blank source headings. (#18891)
  • Fixed an error that occurred when uninstalling plugins. (#18862)
  • Fixed an error that could occur when Control Panel HTML values were passed as Stringable objects. (#18883)
  • Fixed a bug where plugin package config files could affect plugin settings before being published. (#18885)
  • Fixed a bug where the control panel would continuously poll for queue job info, even if there were no active jobs. (#18853)
  • Fixed a bug where legacy redirect responses were not being handled. (#18860)
  • Fixed a bug where email addresses couldn’t be saved when applying unpublished user drafts. (#18882)
  • Fixed a bug where the Updates utility wasn’t showing available updates. (#18884)
4.18.0.1
  • Fixed a bug where the |default filter only accepted string values. (#18886)
5.10.1
  • Fixed a bug where assets’ Alternative Text values weren’t always being set when replacing an existing asset’s file. (#18713)
  • Fixed a bug where element indexes had horizontal scroll bars while loading. (#18870)
  • Fixed a bug where elements selected by Link fields weren’t getting replaced with their localized versions when propagating content for newly-created elements to other sites. (#18743)
  • Fixed a bug where it wasn’t possible to replace the selected element within Link fields with a localized version of the same element. (#18873)
  • Fixed a bug where nested entries weren’t getting their Post Date values set. (#18872)
  • Fixed a bug where it was difficult to interact with element source paths within element selector modals. (#18876)
6.0.0-alpha.2
  • Added support for SQLite backups and restores. (#18803)
  • Added support for Symfony-style array config files in config/craft/sanitizers/. (#18808)
  • Added support for configuring the system time zone during installation. (#18794)
  • Added the legacy paginate Twig variable back.
  • Added CP access permission checks to Control Panel action routes.
  • The craftAsset() Twig function now resolves to Vite versioned assets. (#18801)
  • Renamed the |money Twig filter’s formatLocale argument to locale.
  • Deprecated the csrfTokenName, enableCsrfCookie, and enableCsrfProtection general config settings. (#18806)
  • Removed support for the Debug Toolbar. Laravel Debugbar can be used instead. (#18812)
  • Improved Control Panel icon loading performance.
  • Fixed a PHP error that occurred when saving a Structure section with a Max Levels value. (#18809)
  • Fixed a bug where plugin settings pages were missing registered scripts and styles. (#18815)
  • Fixed a PHP error that occurred when saving an entry type. (#18816)
  • Fixed an issue with Typecast where typed setters wouldn't have precedence over private properties.
  • Fixed a bug where Control Panel templates failed to load on Windows due to mismatched directory separators or drive-letter casing in CraftCms\Cms\View\TwigEngine. (#18804)
  • Fixed a bug where Craft’s Vite hot file configuration could override the host application’s Vite hot file. (#18810)
  • Fixed a bug where CraftCms\Cms\Support\Typecast could give private properties precedence over typed setters.
  • Fixed a bug where runQueueAutomatically wasn’t being respected. (#18817)
  • Fixed a bug where CraftCms\Cms\Validation\Rules\EnvValueRule could parse boolean values incorrectly.
  • Fixed a bug where Blade templates weren’t resolving correctly.
  • Fixed a bug where console command aliases weren’t prefixed with craft:.
  • Fixed a bug where element duplication included IDs.
  • Fixed a bug where legacy action requests didn’t resolve correctly when using DefaultController.
  • Fixed a bug where legacy controller CSRF validation exclusions weren’t always respected.
  • Fixed a bug where legacy plugin settings weren’t saved correctly.
  • Fixed a bug where legacy redirects and streamed responses weren’t forwarded to Laravel correctly.
  • Fixed a bug where preview requests could write template caches.
  • Fixed a bug where private templates couldn’t be used as section templates.
  • Fixed a bug where the legacy Application::EVENT_AFTER_REQUEST event wasn’t triggered.
  • Fixed a bug where the password reset email throttle applied to Control Panel requests.
  • Fixed a bug where the Support widget could render unescaped HTML.
  • Fixed a bug where Twig macros were allowed in sandboxed templates.
  • Fixed a bug where user passkeys weren’t persisting.
  • Fixed an error that occurred when validation errors stored in the session were plain arrays.
  • Fixed compatibility issues with legacy element queries.
  • Fixed compatibility issues with legacy fallback routes.
  • Fixed legacy model behavior when unsafe config keys were provided.
  • Fixed permissions enforcement when duplicating Matrix blocks.
  • Fixed permissions enforcement when saving user fields through generic element save endpoints.
  • Fixed a bug where a yii\base\InvalidConfigException would be thrown when a Yii2-based plugin registered an asset bundle. (#18818)
  • Fixed a bug where using {{ successMessageInput() }} would not decrypt the resulting message for the flash message.
  • Fixed a bug where a missing widget from an uninstalled plugin would throw instead of mapping to a MissingWidget.
  • Fixed a bug where an address' ownership ids could be overridden unintentionally.
  • Fixed a bug where getHasSsoIdentity() would return false when Socialite was not installed but the user had an SSO identity.
  • Fixed a bug where the site's offline status was not being enforced on matched element routes.
  • Fixed a user photo validation issue with file extensions.
  • Fixed a bug where legacy controllers could return null but were not considered handled.
  • Improved performance of the dashboard by reducing the amount of queries for widgets
  • Fixed a bug where criteria added to clones of executed element queries could be ignored. (#18826)
  • Fixed a bug where Yii2 behaviors registered from plugins weren’t getting attached at the right time. (#18824)
  • Fixed an error that occurred when running craft:install in environments where Laravel Prompts can only render tasks statically. (#18830)
  • Fix legacy model array access for null properties (#18843)
  • Fix Twig access to Laravel error bags (#18841)
  • Fixed a bug where singles were throwing an exception (#18845)
  • Fixed a bug where plugin settings were not saving consistently (#18849)
  • Fixed a bug where deprecated string-based orderBy() arguments could cause element queries to throw an unknown column exception. (#18852)
  • Fixed a bug where Laravel HTTP exceptions weren’t passed to legacy error handler event listeners. (#18854)
  • Fixed a bug where FieldLayouts were being flashed to the session as arrays. (#18847)
5.10.0

Content Management

  • Collapsed Matrix blocks now show their entries’ UI labels as preview text, whenever possible. (#18484)
  • Element-level actions within nested element management fields (Matrix, Addresses, etc.) now consistently affect all selected elements, when performed on a selected element. (#18561)
  • Elements within Matrix and Addresses fields now have “Paste above” actions when a compatible element is copied. (#17406)
  • Elements now keep track of the index page’s URL their edit page was linked to from, and explicitly redirect back to that page after save, rather than always redirecting to the referrer. (#18680)
  • Addresses fields now have a “Copy all addresses” field-level action. (#18561)
  • Matrix fields’ “Expand”, “Collapse”, and “Copy” field-level actions now always affect all nested entries, regardless of whether any entries are selected. (#18561)
  • Matrix fields no longer have “Duplicate” and “Delete” field-level actions. (#18561)
  • Number fields now show their selected currency beside their input, if their Preview Format setting is set to “As currency values”. (#18498)
  • Color field previews are now blank for fields without a value. (#18614)
  • Text condition rules now have “does not equal”, “is one of” and “is not one of” operators.
  • Numeric condition rules now have “is one of” and “is not one of” operators. (#18734)
  • Editable table columns now set min-width styles based on their configured widths, if set. (#18534)
  • Entry post dates are no longer automatically set until the entry is fully saved as enabled. (#18642)
  • Element edit screens now have a “Save as a new draft” action when editing an explicitly-created draft. (#18722)
  • Address edit screens now have “Field settings” action menu items. (#18544)
  • Asset edit screens now have “Volume settings” and “Filesystem settings” action menu items. (#18544)
  • Entries’ “Entry type settings” and “Section settings” action menu items are now only shown for element edit screens’ primary action menus.
  • Category indexes can now have “Group” columns. (#18553)
  • Element slideouts now automatically refresh when the same element is updated in another tab/slideout. (#18625)
  • Added the “Time Zone” user preference. (#8518)
  • Element indexes now automatically refresh after duplicating elements and the queue is completed, if there’s an active search term. (#18636)
  • Timestamps in the control panel now include their time zone abbreviation. (#18639)
  • Generated field values are no longer truncated within element cards. (#18646)
  • Assets’ Alternative Text values are now automatically set on upload, based on descriptive text data found in the uploaded file’s metadata. (#18744)
  • When deleting elements, a modal window is now shown alerting the user of any potential issues, such as existing relationships. (#18728)
  • “Verification Code” and “Recovery Code” forms no longer get auto-submitted when entering a value.
  • Number columns within Table fields are now formatted according to the user’s preferred formatting locale. (#18823)

Administration

  • It’s now possible to replace the selected custom field for existing field layout elements. (#18814)
  • Sections now have a “Min Authors” setting. (#18662)
  • Time fields’ “Max Time” settings can now be set to an earlier time than “Min Time”, for overnight time ranges. (#18575)
  • Component chips within component select inputs now have “Replace” actions.
  • Newlines in system message bodies are now replaced with <br> tags. (#18058)
  • Added the --to-default option to resave commands. (#18522)
  • Added the --method option to the users/remove-2fa command. (#18732)

Development

  • Added the heading()/h() and h1()h6() Twig functions. (#18524)
  • The tag() Twig function now accepts a string for its second argument. (#18524)
  • The |attr, |parseAttr, and |removeClass Twig filters no longer log warnings when performed on a string without an HTML tag. (#17622)
  • The |default Twig filter and is empty Twig test now treat all yii\base\Model instances as not empty. (#18727)
  • The |number Twig filter now has a locale argument. (#18823)
  • The |time and |datetime Twig filters now have withTimeZone arguments. (#18639)
  • The |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)
  • Entry postDate values are now null on creation, rather than set to the dateCreated value. (#18642)
  • Assets’ url GraphQL fields’ immediately arguments are no longer deprecated. (#18581)
  • JSON fields now support array values in POST data. (#18705)
  • Added 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)
  • Markdown parsing now respects the first number of ordered lists. (#18671)

Extensibility

  • Added craft\base\DefaultableFieldInterface. (#18522)
  • Added craft\base\Element::EVENT_DEFINE_DELETION_BLOCKERS. (#18728)
  • Added craft\base\ElementActionInterface::getTriggerId().
  • Added craft\base\ElementInterface::deletionBlockers(). (#18728)
  • Added craft\base\ElementInterface::setDirtyFieldTracking().
  • Added craft\elements\PopulateElementEvent::$content.
  • Added craft\elements\db\ElementQuery::$activeQuery.
  • Added craft\elements\db\ElementQueryInterface::collectIds().
  • Added craft\elements\deletionblockers\BaseDeletionBlocker. (#18728)
  • Added craft\elements\deletionblockers\DeletionBlockerInterface. (#18728)
  • Added craft\elements\deletionblockers\EntryAuthorsBlocker. (#18728)
  • Added craft\elements\deletionblockers\RelationDeletionBlocker. (#18728)
  • Added craft\errors\FieldNotFoundException::$fieldId.
  • Added craft\events\DefineElementDeletionBlockersEvent. (#18728)
  • Added craft\fieldlayoutelements\CustomField::setFieldId().
  • Added craft\helpers\ElementHelper::belongsToCanonicalOwner().
  • Added craft\helpers\Html::jsWithVars().
  • Added craft\helpers\Markdown. (#18671)
  • Added craft\models\Section::$minAuthors. (#18662)
  • Added craft\queue\jobs\ReplaceRelations. (#18728)
  • Added craft\services\Elements::REF_TAG_PATTERN.
  • Added craft\services\Entries::reassignEntries().
  • Added craft\validators\TimeValidator::$outOfRange. (#18575)
  • Added Craft.CpScreenSlideout::reload(). (#18625)
  • Added 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)
  • Removed craft\controllers\AppController::actionResourceJs(). (#18559)
  • Craft.CP now triggers a queueCompleted event when the last queue job is completed.
  • Deprecated craft\controllers\UsersController::EVENT_DEFINE_CONTENT_SUMMARY. (#18728)
  • Deprecated craft\elements\User::$inheritorOnDelete. (#18728)
  • Deprecated craft\elements\actions\DeleteUsers. (#18728)
  • Deprecated craft\events\DefineUserContentSummaryEvent. (#18728)
  • Deprecated Craft.DeleteUserModal. (#18728)

System

  • Improve the image quality of WEBP transforms, when optimizeImageFilesize is disabled. (#18635)
  • Cross-domain script tags added by JavaScript are now loaded directly, rather than via a proxy. (#18559)
  • Updated Twig to 3.24. (#18259, #18454)
  • Updated bacon/bacon-qr-code to 3.x. (#18742)
  • Updated the built-in composer.phar to 2.9.8. (#18761)
  • Fixed a bug where nested entries weren’t getting loaded with their content, if they had an entry type that was no longer allowed by their Matrix field.
  • Fixed the wording of the validation error when saving a nested entry with an invalid entry type. (#18506)
  • Fixed a bug where relation fields’ element query params weren’t limiting results based on the query’s target site(s). (#18781)
  • Fixed a bug where nested content could be updated unexpectedly or deleted after making successive edits to it. (#18835)
  • Fixed a bug where full-page element edit screens weren’t being reloaded automatically when the element was saved in another tab.
  • Fixed a high-severity RCE vulnerability. (GHSA-f74w-488g-8x5r)
  • Fixed a moderate-severity JavaScript injection vulnerability. (GHSA-c55v-343g-5xff)
  • Fixed a moderate-severity path traversal vulnerability. (GHSA-287w-mxq6-x2cp)
4.18.0

Development

  • The |default Twig filter and is empty Twig test now treat all yii\base\Model instances as not empty. (#18727)
  • Added craft\filters\SecFetchSiteFilter for request origin verification. (#18641)
  • dataUrl() is no longer allowed in sandboxed Twig environments by default.

Extensibility

  • Removed craft\controllers\AppController::actionResourceJs(). (#18559)

System

  • Cross-domain script tags added by JavaScript are now loaded directly, rather than via a proxy. (#18559)
  • Updated the built-in composer.phar to 2.9.8. (#18761)
  • Fixed a moderate-severity JavaScript injection vulnerability. (GHSA-c55v-343g-5xff)
  • Fixed a moderate-severity path traversal vulnerability. (GHSA-287w-mxq6-x2cp)
5.9.23
  • Updated Yii to 2.0.55. (#18833)
  • Fixed a bug where the “Move…” asset index action was always disabled for files. (#18798)
  • Fixed a bug where nested elements would get soft-deleted after running the entrify/global-set command on subsequent environments. (#18767)
  • Fixed a bug where row headings within Table fields weren’t getting statically translated in the control panel. (#13703)
  • Fixed a bug where entry type chips within Matrix settings could be missing their action items.
  • Fixed a bug where custom field override settings’ Label, Handle, and Instructions fields could be missing their placeholder values.
  • Fixed a bug where site name and language values set to environment variables were getting replaced with their resolved values when installing Craft. (#18780)
  • Fixed a bug where site name values set to environment variables were getting replaced with their resolved values on save. (#18789)
  • Fixed a bug where browser tabs weren’t always getting refreshed when nested elements were reordered on another browser tab.
  • Fixed a bug where reordering nested elements on a draft could reorder them on the canonical owner element as well. (#18751)
  • Fixed a high-severity XSS vulnerability. (GHSA-24x4-j6x9-rfw5)
  • Fixed a moderate-severity XSS vulnerability. (GHSA-xrqc-p465-2xvg)
4.17.16
  • Updated Yii to 2.0.55. (#18833)
  • Fixed a bug where the “Move…” asset index action was always disabled for files. (#18798)
  • Fixed a high-severity XSS vulnerability. (GHSA-24x4-j6x9-rfw5)
6.0.0-alpha.1

Development

  • Reference tags now support fallback values when no attribute is specified. (#17688)
  • Deprecated support for categories, global sets, and tags. (#18009)

Extensibility

  • Added CraftCms\Cms\Support\Arr.
  • Added CraftCms\Cms\Support\DateTimeHelper.
  • Added CraftCms\Cms\Support\File.
  • Added CraftCms\Cms\Support\Facades\Path.
  • Added CraftCms\Cms\Support\Facades\Markdown.
  • Added CraftCms\Cms\Support\Path.
  • Added CraftCms\Cms\Support\Str.
  • Added CraftCms\Cms\Support\URL.
  • Added 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)
  • Deprecated craft\helpers\ArrayHelper. CraftCms\Cms\Support\Arr should be used instead.
  • Deprecated craft\helpers\ConfigHelper. CraftCms\Cms\Support\Config should be used instead.
  • Deprecated craft\helpers\DateTimeHelper. CraftCms\Cms\Support\DateTimeHelper should be used instead.
  • Deprecated craft\helpers\Diff. CraftCms\Cms\Support\Diff should be used instead.
  • Deprecated 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.
  • Deprecated craft\helpers\Html. CraftCms\Cms\Support\Html should be used instead.
  • Deprecated 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.
  • Deprecated craft\helpers\HtmlPurifier::process(). CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers::sanitize() should be used instead.
  • Deprecated craft\helpers\HtmlPurifier::cleanUtf8().
  • Deprecated craft\helpers\HtmlPurifier::convertToUtf8(). CraftCms\Cms\Support\Str::convertToUtf8() should be used instead.
  • Deprecated craft\helpers\HtmlPurifier::configure(). CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers::defaults() or a custom sanitizer registration should be used instead.
  • Deprecated config/craft/htmlpurifier/*.json sanitizer config files. Sanitizers should be registered on CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers instead.
  • Deprecated craft\services\Path. CraftCms\Cms\Support\Path should be used instead.
  • Deprecated craft\helpers\SessionHelper. Illuminate\Support\Facades\Session should be used instead.
  • Deprecated craft\helpers\Sequence. CraftCms\Cms\Support\Sequence should be used instead.
  • Deprecated craft\helpers\StringHelper. CraftCms\Cms\Support\Str should be used instead.
  • Deprecated 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).
  • Deprecated craft.app.config.general in Twig. app.config.craft.general should be used instead.
  • Deprecated craft\helpers\App::env(), CraftCms\Cms\Support\Env::get() should be used instead.
  • Deprecated craft\markdown\Markdown, craft\markdown\GithubMarkdown, craft\markdown\MarkdownExtra, and craft\markdown\PreEncodedMarkdown. CraftCms\Cms\Support\Facades\Markdown should be used instead.
  • Deprecated craft\helpers\DateRange. CraftCms\Cms\Shared\Enums\DateRangeType and CraftCms\Cms\Shared\Enums\DateRangePeriod should be used instead.
  • Deprecated craft\helpers\Cp. One of the following classes should be used instead:
    • CraftCms\Cms\Cp\Alerts
    • CraftCms\Cms\Cp\FormFields
    • CraftCms\Cms\Cp\Html\ContentHtml
    • CraftCms\Cms\Cp\Html\ElementHtml
    • CraftCms\Cms\Cp\Html\ElementIndexHtml
    • CraftCms\Cms\Cp\Html\MenuHtml
    • CraftCms\Cms\Cp\Html\PreviewHtml
    • CraftCms\Cms\Cp\Html\StatusHtml
    • CraftCms\Cms\Cp\Icons
    • CraftCms\Cms\Cp\RequestedSite
  • Deprecated craft\helpers\Json. CraftCms\Cms\Support\Json should be used instead.
  • Deprecated craft\services\Composer. CraftCms\Cms\Support\Composer should be used instead.
  • Deprecated craft\enums\Color. CraftCms\Cms\Support\Enums\Color should be used instead.
  • Deprecated craft\enums\AttributeStatus. CraftCms\Cms\Element\Enums\AttributeStatus should be used instead.
  • Deprecated craft\enums\CmsEdition. CraftCms\Cms\Edition should be used instead.
  • Deprecated craft\enums\ElementIndexViewMode. CraftCms\Cms\Element\Enums\ElementIndexViewMode should be used instead.
  • Deprecated craft\enums\LicenseKeyStatus. CraftCms\Cms\Support\Enums\LicenseKeyStatus should be used instead.
  • Deprecated craft\enums\MenuItemType. CraftCms\Cms\Element\Enums\MenuItemType should be used instead.
  • Deprecated craft\enums\PropagationMethod. CraftCms\Cms\Element\Enums\PropagationMethod should be used instead.
  • Deprecated craft\enums\TimePeriod. CraftCms\Cms\Support\Enums\TimePeriod should be used instead.
  • Deprecated craft\services\Gc. CraftCms\Cms\GarbageCollection\GarbageCollection should be used instead.
  • Deprecated craft\services\Api. CraftCms\Cms\Support\Api should be used instead.
  • Deprecated craft\helpers\Api. CraftCms\Cms\Support\Api should be used instead.
  • Deprecated craft\nameparsing\CustomLanguage. CraftCms\Cms\Shared\Nameparser\CustomLanguage should be used instead.
  • Deprecated craft\helpers\App. The following classes/methods should be used instead:
    • General helpers

    • 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()
    • Env

    • App:env() --> \CraftCms\Cms\Support\Env::get()
    • App:parseEnv() --> \CraftCms\Cms\Support\Env::parse()
    • PHP

    • 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()
    • License

    • 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()
  • Deprecated Craft::createGuzzleClient(). CraftCms\Cms\Support\Facades\Http::create() should be used instead.
  • Deprecated craft\helpers\FileHelper. CraftCms\Cms\Support\File should be used instead.
  • Deprecated craft\helpers\UrlHelper. CraftCms\Cms\Support\URL should be used instead.

Deprecator

  • Added CraftCms\Cms\Support\Facades\Deprecator.
  • Added CraftCms\Cms\Deprecator\Commands\ClearDeprecations.
  • Removed craft\console\controllers\ClearDeprecationsController.php.
  • Deprecated craft\services\Deprecator. CraftCms\Cms\Deprecator\Deprecator should be used instead.
  • Deprecated craft\models\DeprecationError. CraftCms\Cms\Deprecator\Models\DeprecationError should be used instead.
  • Deprecated craft\errors\DeprecationException. CraftCms\Cms\Deprecator\Exceptions\DeprecationException should be used instead.

Console commands

  • Added php craft twig:cache - Precompile Twig views
  • Added php craft twig:clear - Clear precompiled Twig views
  • craft\console\controllers\EnvController has been removed in favor of the classes below:
    • CraftCms\Cms\Console\Commands\Env\EnvRemoveCommand => php craft env:remove
    • CraftCms\Cms\Console\Commands\Env\EnvSetCommand => php craft env:set
    • CraftCms\Cms\Console\Commands\Env\EnvShowCommand => php craft env:show
  • craft\console\controllers\IndexAssetsController has been removed in favor of the classes below:
    • CraftCms\Cms\Asset\Commands\CleanupAssetIndexesCommand => php craft index-assets:cleanup
    • CraftCms\Cms\Asset\Commands\IndexAllAssetsCommand => php craft index-assets:all
    • CraftCms\Cms\Asset\Commands\IndexOneAssetCommand => php craft index-assets:one
  • craft\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 on
    • CraftCms\Cms\Console\Commands\System\OffCommand => php craft off
  • craft\console\controllers\ElementsController has been removed in favor of the classes below:
    • CraftCms\Cms\Element\Commands\DeleteCommand => php craft elements:delete
    • CraftCms\Cms\Element\Commands\DeleteAllOfTypeCommand => php craft elements:delete-all-of-type
    • CraftCms\Cms\Element\Commands\RestoreCommand => php craft elements:restore
  • craft\console\controllers\UpdateStatusesController has been removed in favor of the class below:
    • CraftCms\Cms\Entry\Commands\UpdateStatusesCommand => php craft update-statuses
  • craft\console\controllers\utils\FixElementUidsController has been removed in favor of the class below:
    • CraftCms\Cms\Console\Commands\Utils\FixElementUidsCommand => php craft utils:fix-element-uids
  • craft\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-uids
  • craft\console\controllers\utils\PruneOrphanedEntriesController has been removed in favor of the class below:
    • CraftCms\Cms\Console\Commands\Utils\PruneOrphanedEntriesCommand => php craft utils:prune-orphaned-entries
  • craft\console\controllers\utils\PruneProvisionalDraftsController has been removed in favor of the class below:
    • CraftCms\Cms\Console\Commands\Utils\PruneProvisionalDraftsCommand => php craft utils:prune-provisional-drafts
  • craft\console\controllers\utils\PruneRevisionsController has been removed in favor of the class below:
    • CraftCms\Cms\Console\Commands\Utils\PruneRevisionsCommand => php craft utils:prune-revisions
  • craft\console\controllers\utils\RepairController::actionProjectConfig() has been removed in favor of the class below:
    • CraftCms\Cms\ProjectConfig\Commands\RepairCommand => php craft project-config:repair

Mutex

Craft's Mutex classes have been deprecated. Laravel's atomic locking should be used instead.

  • Deprecated craft\mutex\Mutex
  • Deprecated craft\mutex\MutexTrait
  • Deprecated Craft::$app->getMutex()

Components

  • Deprecated craft\base\ComponentInterface. CraftCms\Cms\Component\Contracts\ComponentInterface should be used instead.
  • Deprecated craft\base\ConfigurableComponentInterface. CraftCms\Cms\Component\Contracts\ConfigurableComponentInterface should be used instead.
  • Deprecated craft\base\SavableComponentInterface. CraftCms\Cms\Component\Contracts\SavableComponentInterface should be used instead.

Dashboard & Widgets

Controllers
  • Removed craft\controllers\DashboardController. The following controllers now implement this functionality:
    • CraftCms\Cms\Http\Controllers\Dashboard\DashboardController
    • CraftCms\Cms\Http\Controllers\Dashboard\WidgetsController
    • CraftCms\Cms\Http\Controllers\Dashboard\Widgets\CraftSupportController
    • CraftCms\Cms\Http\Controllers\Dashboard\Widgets\FeedController
Deprecations
  • Deprecated Craft::$app->getDashboard(). app(\CraftCms\Cms\Dashboard\Dashboard::class) should be used instead.
  • Deprecated craft\services\Dashboard. CraftCms\Cms\Dashboard\Dashboard should be used instead.
  • Deprecated craft\base\Widget. CraftCms\Cms\Dashboard\Widgets\Widget should be used instead.
  • Deprecated craft\base\WidgetInterface. CraftCms\Cms\Dashboard\Contracts\WidgetInterface should be used instead.
  • Deprecated craft\base\WidgetTrait.
  • Deprecated craft\widgets\CraftSupport. CraftCms\Cms\Dashboard\Widgets\CraftSupport should be used instead.
  • Deprecated craft\widgets\Feed. CraftCms\Cms\Dashboard\Widgets\Feed should be used instead.
  • Deprecated craft\widgets\MissingWidget. CraftCms\Cms\Dashboard\Widgets\MissingWidget should be used instead.
  • Deprecated craft\widgets\MyDrafts. CraftCms\Cms\Dashboard\Widgets\MyDrafts should be used instead.
  • Deprecated craft\widgets\NewUsers. CraftCms\Cms\Dashboard\Widgets\NewUsers should be used instead.
  • Deprecated craft\widgets\QuickPost. CraftCms\Cms\Dashboard\Widgets\QuickPost should be used instead.
  • Deprecated craft\widgets\RecentEntries. CraftCms\Cms\Dashboard\Widgets\RecentEntries should be used instead.
  • Deprecated craft\widgets\Updates. CraftCms\Cms\Dashboard\Widgets\Updates should be used instead.
  • Deprecated craft\records\Widget. CraftCms\Cms\Dashboard\Models\Widget should be used instead.
Events
  • Deprecated craft\services\Dashboard::EVENT_REGISTER_WIDGET_TYPES. CraftCms\Cms\Dashboard\Events\WidgetTypesResolving should be used instead.
  • Deprecated craft\events\WidgetEvent in favor of the following new events:
    • craft\services\Dashboard::EVENT_BEFORE_SAVE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetSaving
    • craft\services\Dashboard::EVENT_AFTER_SAVE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetSaved
    • craft\services\Dashboard::EVENT_BEFORE_DELETE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetDeleting
    • craft\services\Dashboard::EVENT_AFTER_DELETE_WIDGET => CraftCms\Cms\Dashboard\Events\WidgetDeleted

Address

  • Added CraftCms\Cms\Support\Facades\Addresses.

Assets

  • Added CraftCms\Cms\Asset\AssetsHelper.
  • Added CraftCms\Cms\Support\Facades\Assets.
  • Added CraftCms\Cms\Support\Facades\AssetIndexer facade.
  • Added CraftCms\Cms\Support\Facades\Folders.
  • Deprecated craft\helpers\Assets. CraftCms\Cms\Asset\AssetsHelper should be used instead.
  • Deprecated craft\services\Assets. CraftCms\Cms\Asset\Assets and CraftCms\Cms\Asset\Folders should be used instead.
  • Deprecated \craft\records\Asset. \CraftCms\Cms\Asset\Models\Asset should be used instead.
  • Deprecated \craft\records\AssetIndexData. \CraftCms\Cms\Asset\Models\AssetIndexData should be used instead.
  • Deprecated \craft\records\AssetIndexingSession. \CraftCms\Cms\Asset\Models\AssetIndexingSession should be used instead.
  • Deprecated \craft\records\Volume. \CraftCms\Cms\Asset\Models\Volume should be used instead.
  • Deprecated \craft\records\VolumeFolder. \CraftCms\Cms\Asset\Models\VolumeFolder should be used instead.
  • Deprecated \craft\controllers\AssetIndexesController. \CraftCms\Cms\Http\Controllers\Utilities\AssetIndexesController should be used instead.
  • Deprecated craft\services\AssetIndexer. CraftCms\Cms\Asset\AssetIndexer should be used instead.
  • Deprecated craft\models\AssetIndexData. CraftCms\Cms\Asset\Data\AssetIndexEntry should be used instead.
  • Deprecated craft\models\AssetIndexingSession. CraftCms\Cms\Asset\Data\IndexingSession should be used instead.
  • Deprecated craft\errors\AssetException. CraftCms\Cms\Asset\Exceptions\AssetException should be used instead.
  • Deprecated craft\errors\AssetDisallowedExtensionException. CraftCms\Cms\Asset\Exceptions\AssetDisallowedExtensionException should be used instead.
  • Deprecated craft\errors\AssetNotIndexableException. CraftCms\Cms\Asset\Exceptions\AssetNotIndexableException should be used instead.
  • Deprecated craft\errors\FileException. CraftCms\Cms\Asset\Exceptions\FileException should be used instead.
  • Deprecated craft\errors\ImageException. CraftCms\Cms\Asset\Exceptions\ImageException should be used instead.
  • Deprecated craft\errors\ImageTransformException. CraftCms\Cms\Asset\Exceptions\ImageTransformException should be used instead.
  • Deprecated craft\errors\MissingAssetException. CraftCms\Cms\Asset\Exceptions\MissingAssetException should be used instead.
  • Deprecated craft\errors\MissingVolumeFolderException. CraftCms\Cms\Asset\Exceptions\MissingVolumeFolderException should be used instead.
  • Deprecated craft\errors\VolumeException. CraftCms\Cms\Asset\Exceptions\VolumeException should be used instead.

Events

  • Added CraftCms\Cms\Asset\Events\AssetFileKindsResolving.
  • Added CraftCms\Cms\Asset\Events\SetAssetFilename.
  • Deprecated craft\events\SetAssetFilenameEvent. CraftCms\Cms\Asset\Events\SetAssetFilename should be used instead.
  • Deprecated craft\events\RegisterAssetFileKindsEvent. CraftCms\Cms\Asset\Events\AssetFileKindsResolving should be used instead.
  • Deprecated craft\events\ReplaceAssetEvent in favor of the following new events:
    • craft\services\Assets::EVENT_BEFORE_REPLACE_ASSET => CraftCms\Cms\Asset\Events\AssetReplacing
    • craft\services\Assets::EVENT_AFTER_REPLACE_ASSET => CraftCms\Cms\Asset\Events\AssetReplaced
  • Deprecated craft\events\DefineAssetThumbUrlEvent. CraftCms\Cms\Asset\Events\ThumbUrlResolving should be used instead.
  • Deprecated craft\events\AssetPreviewEvent. CraftCms\Cms\Asset\Events\PreviewHandlerResolving should be used instead.

Auth

  • Refactored the authentication system to use Laravel's authentication system.
  • Added CraftCms\Cms\Auth\Events\SettingPassword.
  • Added CraftCms\Cms\User\Notifications\ResetPasswordNotification.
  • Deprecated craft\services\Auth. CraftCms\Cms\Auth\Auth should be used instead.
  • Deprecated craft\web\User. auth('craft')->user() or CraftCms\Cms\User\Elements\User methods should be used instead.
  • Deprecated craft\events\AuthenticateUserEvent. CraftCms\Cms\Auth\Events\UserAuthenticating should be used instead.
  • Deprecated \craft\records\Authenticator. \CraftCms\Cms\Auth\Models\Authenticator should be used instead.
  • Deprecated \craft\records\RecoveryCodes. \CraftCms\Cms\Auth\Models\RecoveryCodes should be used instead.
  • Deprecated \craft\records\SsoIdentity. \CraftCms\Cms\Auth\Models\SsoIdentity should be used instead.
  • Deprecated \craft\records\WebAuthn. \CraftCms\Cms\Auth\Models\WebAuthn should be used instead.
  • Deprecated craft\behaviors\SessionBehavior::authorize. CraftCms\Cms\Auth\SessionAuth::authorize should be used instead.
  • Deprecated craft\behaviors\SessionBehavior::deauthorize. CraftCms\Cms\Auth\SessionAuth::deauthorize should be used instead.
  • Deprecated craft\behaviors\SessionBehavior::checkAuthorization. CraftCms\Cms\Auth\SessionAuth::checkAuthorization should be used instead.
  • Deprecated craft\services\Users::isVerificationCodeValidForUser(). Password::broker('craft')->tokenExists($user, $code) should be used instead.
  • Deprecated 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.
  • Removed craft\controllers\AuthController. The following controllers now implement this functionality:
    • CraftCms\Cms\Http\Controllers\Users\AuthMethodController
    • CraftCms\Cms\Http\Controllers\Users\PasskeysController
    • CraftCms\Cms\Http\Controllers\Users\RecoveryCodesController
  • Removed verificationCode and verificationCodeIssuedDate columns on the users table in favor of the password_reset_tokens table.

Authorization

Craft 6 now uses Laravel's authorization system for element authorization checks.

Added
  • Added CraftCms\Cms\Auth\Events\ElementAuthorizing event for customizing element authorization.
  • Added CraftCms\Cms\Element\Policies\ElementPolicy base policy for element authorization.
  • Added element-specific authorization policies:
    • CraftCms\Cms\Address\Policies\AddressPolicy
    • CraftCms\Cms\Asset\Policies\AssetPolicy
    • CraftCms\Cms\Entry\Policies\EntryPolicy
    • CraftCms\Cms\User\Policies\UserPolicy
    • CraftCms\Cms\Field\Policies\ContentBlockPolicy

Passkeys

  • Added CraftCms\Cms\Auth\Passkeys\Passkeys.
  • Deprecated 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()
  • Deprecated craft\auth\passkeys\CredentialRepository. CraftCms\Cms\Auth\Passkeys\CredentialRepository should be used instead.
  • Deprecated craft\auth\passkeys\WebauthnServer. CraftCms\Cms\Auth\Passkeys\WebauthnServer should be used instead.

Conditions

Added

  • Added CraftCms\Cms\Support\Facades\Conditions.

Controllers

  • Removed craft\controllers\ConditionsController. CraftCms\Cms\Http\Controllers\ConditionsController should be used instead.

Deprecations

Service
  • Deprecated craft\services\Conditions. CraftCms\Cms\Condition\Conditions should be used instead.
Base Conditions
  • Deprecated craft\base\conditions\ConditionInterface. CraftCms\Cms\Condition\Contracts\ConditionInterface should be used instead.
  • Deprecated craft\base\conditions\ConditionRuleInterface. CraftCms\Cms\Condition\Contracts\ConditionRuleInterface should be used instead.
  • Deprecated craft\base\conditions\BaseCondition. CraftCms\Cms\Condition\BaseCondition should be used instead.
  • Deprecated craft\base\conditions\BaseConditionRule. CraftCms\Cms\Condition\BaseConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseTextConditionRule. CraftCms\Cms\Condition\BaseTextConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseNumberConditionRule. CraftCms\Cms\Condition\BaseNumberConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseSelectConditionRule. CraftCms\Cms\Condition\BaseSelectConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseMultiSelectConditionRule. CraftCms\Cms\Condition\BaseMultiSelectConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseLightswitchConditionRule. CraftCms\Cms\Condition\BaseLightswitchConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseDateRangeConditionRule. CraftCms\Cms\Condition\BaseDateRangeConditionRule should be used instead.
  • Deprecated craft\base\conditions\BaseElementSelectConditionRule. CraftCms\Cms\Condition\BaseElementSelectConditionRule should be used instead.
Elements
  • Deprecated craft\elements\conditions\ElementCondition. CraftCms\Cms\Element\Conditions\ElementCondition should be used instead.
  • Deprecated craft\elements\conditions\ElementConditionInterface. CraftCms\Cms\Element\Conditions\Contracts\ElementConditionInterface should be used instead.
  • Deprecated craft\elements\conditions\ElementConditionRuleInterface. CraftCms\Cms\Element\Conditions\Contracts\ElementConditionRuleInterface should be used instead.
  • Deprecated craft\elements\conditions\HintableConditionRuleTrait. CraftCms\Cms\Element\Conditions\HintableConditionRuleTrait should be used instead.
  • Deprecated craft\elements\conditions\TitleConditionRule. CraftCms\Cms\Element\Conditions\TitleConditionRule should be used instead.
  • Deprecated craft\elements\conditions\SlugConditionRule. CraftCms\Cms\Element\Conditions\SlugConditionRule should be used instead.
  • Deprecated craft\elements\conditions\UriConditionRule. CraftCms\Cms\Element\Conditions\UriConditionRule should be used instead.
  • Deprecated craft\elements\conditions\IdConditionRule. CraftCms\Cms\Element\Conditions\IdConditionRule should be used instead.
  • Deprecated craft\elements\conditions\StatusConditionRule. CraftCms\Cms\Element\Conditions\StatusConditionRule should be used instead.
  • Deprecated craft\elements\conditions\HasUrlConditionRule. CraftCms\Cms\Element\Conditions\HasUrlConditionRule should be used instead.
  • Deprecated craft\elements\conditions\HasDescendantsRule. CraftCms\Cms\Element\Conditions\HasDescendantsRule should be used instead.
  • Deprecated craft\elements\conditions\LevelConditionRule. CraftCms\Cms\Element\Conditions\LevelConditionRule should be used instead.
  • Deprecated craft\elements\conditions\DateCreatedConditionRule. CraftCms\Cms\Element\Conditions\DateCreatedConditionRule should be used instead.
  • Deprecated craft\elements\conditions\DateUpdatedConditionRule. CraftCms\Cms\Element\Conditions\DateUpdatedConditionRule should be used instead.
  • Deprecated craft\elements\conditions\SiteConditionRule. CraftCms\Cms\Element\Conditions\SiteConditionRule should be used instead.
  • Deprecated craft\elements\conditions\SiteGroupConditionRule. CraftCms\Cms\Element\Conditions\SiteGroupConditionRule should be used instead.
  • Deprecated craft\elements\conditions\LanguageConditionRule. CraftCms\Cms\Element\Conditions\LanguageConditionRule should be used instead.
  • Deprecated craft\elements\conditions\RelatedToConditionRule. CraftCms\Cms\Element\Conditions\RelatedToConditionRule should be used instead.
  • Deprecated craft\elements\conditions\NotRelatedToConditionRule. CraftCms\Cms\Element\Conditions\NotRelatedToConditionRule should be used instead.
Entries
  • Deprecated craft\elements\conditions\entries\EntryCondition. CraftCms\Cms\Entry\Conditions\EntryCondition should be used instead.
  • Deprecated craft\elements\conditions\entries\PostDateConditionRule. CraftCms\Cms\Entry\Conditions\PostDateConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\ExpiryDateConditionRule. CraftCms\Cms\Entry\Conditions\ExpiryDateConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\SectionConditionRule. CraftCms\Cms\Entry\Conditions\SectionConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\TypeConditionRule. CraftCms\Cms\Entry\Conditions\TypeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\AuthorConditionRule. CraftCms\Cms\Entry\Conditions\AuthorConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\AuthorGroupConditionRule. CraftCms\Cms\Entry\Conditions\AuthorGroupConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\ViewableConditionRule. CraftCms\Cms\Entry\Conditions\ViewableConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\SavableConditionRule. CraftCms\Cms\Entry\Conditions\SavableConditionRule should be used instead.
  • Deprecated craft\elements\conditions\entries\FieldConditionRule. CraftCms\Cms\Entry\Conditions\FieldConditionRule should be used instead.
Users
  • Deprecated craft\elements\conditions\users\UserCondition. CraftCms\Cms\User\Conditions\UserCondition should be used instead.
  • Deprecated craft\elements\conditions\users\UsernameConditionRule. CraftCms\Cms\User\Conditions\UsernameConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\EmailConditionRule. CraftCms\Cms\User\Conditions\EmailConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\FirstNameConditionRule. CraftCms\Cms\User\Conditions\FirstNameConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\LastNameConditionRule. CraftCms\Cms\User\Conditions\LastNameConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\GroupConditionRule. CraftCms\Cms\User\Conditions\GroupConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\AdminConditionRule. CraftCms\Cms\User\Conditions\AdminConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\CredentialedConditionRule. CraftCms\Cms\User\Conditions\CredentialedConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\LastLoginDateConditionRule. CraftCms\Cms\User\Conditions\LastLoginDateConditionRule should be used instead.
  • Deprecated craft\elements\conditions\users\AffiliatedSiteConditionRule. CraftCms\Cms\User\Conditions\AffiliatedSiteConditionRule should be used instead.
Assets
  • Deprecated craft\elements\conditions\assets\AssetCondition. CraftCms\Cms\Asset\Conditions\AssetCondition should be used instead.
  • Deprecated craft\elements\conditions\assets\VolumeConditionRule. CraftCms\Cms\Asset\Conditions\VolumeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\FilenameConditionRule. CraftCms\Cms\Asset\Conditions\FilenameConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\FileTypeConditionRule. CraftCms\Cms\Asset\Conditions\FileTypeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\FileSizeConditionRule. CraftCms\Cms\Asset\Conditions\FileSizeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\HeightConditionRule. CraftCms\Cms\Asset\Conditions\HeightConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\WidthConditionRule. CraftCms\Cms\Asset\Conditions\WidthConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\DateModifiedConditionRule. CraftCms\Cms\Asset\Conditions\DateModifiedConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\HasAltConditionRule. CraftCms\Cms\Asset\Conditions\HasAltConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\UploaderConditionRule. CraftCms\Cms\Asset\Conditions\UploaderConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\SavableConditionRule. CraftCms\Cms\Asset\Conditions\SavableConditionRule should be used instead.
  • Deprecated craft\elements\conditions\assets\ViewableConditionRule. CraftCms\Cms\Asset\Conditions\ViewableConditionRule should be used instead.
Addresses
  • Deprecated craft\elements\conditions\addresses\AddressCondition. CraftCms\Cms\Address\Conditions\AddressCondition should be used instead.
  • Deprecated craft\elements\conditions\addresses\FullNameConditionRule. CraftCms\Cms\Address\Conditions\FullNameConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\OrganizationConditionRule. CraftCms\Cms\Address\Conditions\OrganizationConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\OrganizationTaxIdConditionRule. CraftCms\Cms\Address\Conditions\OrganizationTaxIdConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\LocalityConditionRule. CraftCms\Cms\Address\Conditions\LocalityConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\DependentLocalityConditionRule. CraftCms\Cms\Address\Conditions\DependentLocalityConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\PostalCodeConditionRule. CraftCms\Cms\Address\Conditions\PostalCodeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\SortingCodeConditionRule. CraftCms\Cms\Address\Conditions\SortingCodeConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\CountryConditionRule. CraftCms\Cms\Address\Conditions\CountryConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\AdministrativeAreaConditionRule. CraftCms\Cms\Address\Conditions\AdministrativeAreaConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\AddressLine1ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine1ConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\AddressLine2ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine2ConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\AddressLine3ConditionRule. CraftCms\Cms\Address\Conditions\AddressLine3ConditionRule should be used instead.
  • Deprecated craft\elements\conditions\addresses\FieldConditionRule. CraftCms\Cms\Address\Conditions\FieldConditionRule should be used instead.
Fields
  • Deprecated craft\fields\conditions\FieldConditionRuleInterface. CraftCms\Cms\Field\Conditions\Contracts\FieldConditionRuleInterface should be used instead.
  • Deprecated craft\fields\conditions\FieldConditionRuleTrait. CraftCms\Cms\Field\Conditions\FieldConditionRuleTrait should be used instead.
  • Deprecated craft\fields\conditions\GeneratedFieldConditionRule. CraftCms\Cms\Field\Conditions\GeneratedFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\TextFieldConditionRule. CraftCms\Cms\Field\Conditions\TextFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\NumberFieldConditionRule. CraftCms\Cms\Field\Conditions\NumberFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\MoneyFieldConditionRule. CraftCms\Cms\Field\Conditions\MoneyFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\OptionsFieldConditionRule. CraftCms\Cms\Field\Conditions\OptionsFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\RelationalFieldConditionRule. CraftCms\Cms\Field\Conditions\RelationalFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\LightswitchFieldConditionRule. CraftCms\Cms\Field\Conditions\LightswitchFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\EmptyFieldConditionRule. CraftCms\Cms\Field\Conditions\EmptyFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\DateFieldConditionRule. CraftCms\Cms\Field\Conditions\DateFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\CountryFieldConditionRule. CraftCms\Cms\Field\Conditions\CountryFieldConditionRule should be used instead.
  • Deprecated craft\fields\conditions\LinkFieldConditionRule. CraftCms\Cms\Field\Conditions\LinkFieldConditionRule should be used instead.
Events
  • Deprecated craft\events\RegisterConditionRulesEvent. CraftCms\Cms\Condition\Events\ConditionRulesResolving should be used instead.

Drafts

  • Deprecated craft\services\Drafts. CraftCms\Cms\Element\Drafts should be used instead.
  • Deprecated craft\events\DraftEvent. One of the events extending CraftCms\Cms\Element\Events\DraftEvent should be used instead.
  • Deprecated craft\behaviors\DraftBehavior. CraftCms\Cms\Element\Concerns\Draftable should be used instead.

Elements

  • Added CraftCms\Cms\Element\ElementCaches and CraftCms\Cms\Support\Facades\ElementCaches.
    • Deprecated craft\services\Elements::getIsCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::isCollectingCacheInfo() should be used instead.
    • Deprecated craft\services\Elements::startCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::startCollectingCacheInfo() should be used instead.
    • Deprecated craft\services\Elements::collectCacheTags(). CraftCms\Cms\Element\ElementCaches::collectCacheTags() should be used instead.
    • Deprecated craft\services\Elements::setCacheExpiryDate(). CraftCms\Cms\Element\ElementCaches::setCacheExpiryDate() should be used instead.
    • Deprecated craft\services\Elements::collectCacheInfoForElement(). CraftCms\Cms\Element\ElementCaches::collectCacheInfoForElement() should be used instead.
    • Deprecated craft\services\Elements::stopCollectingCacheInfo(). CraftCms\Cms\Element\ElementCaches::stopCollectingCacheInfo() should be used instead.
    • Deprecated craft\services\Elements::invalidateAllCaches(). CraftCms\Cms\Element\ElementCaches::invalidateAll() should be used instead.
    • Deprecated craft\services\Elements::invalidateCachesForElementType(). CraftCms\Cms\Element\ElementCaches::invalidateForElementType() should be used instead.
    • Deprecated craft\services\Elements::invalidateCachesForElement(). CraftCms\Cms\Element\ElementCaches::invalidateForElement() should be used instead.
  • Added CraftCms\Cms\Element\BulkOp\BulkOps, CraftCms\Cms\Element\BulkOp\BulkOpDeferrals, and CraftCms\Cms\Support\Facades\BulkOps.
    • Deprecated craft\services\Elements::getBulkOpKeys(). CraftCms\Cms\Element\BulkOp\BulkOps::activeKeys() should be used instead.
    • Deprecated craft\services\Elements::beginBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::start() should be used instead.
    • Deprecated craft\services\Elements::resumeBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::resume() should be used instead.
    • Deprecated craft\services\Elements::endBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::end() should be used instead.
    • Deprecated craft\services\Elements::trackElementInBulkOps(). CraftCms\Cms\Element\BulkOp\BulkOps::trackElement() should be used instead.
    • Deprecated craft\services\Elements::ensureBulkOp(). CraftCms\Cms\Element\BulkOp\BulkOps::ensure() should be used instead.
    • Deprecated craft\events\BulkOpEvent::defer(). CraftCms\Cms\Element\BulkOp\BulkOps::defer() should be used instead.
  • Added CraftCms\Cms\Element\ElementActivity, CraftCms\Cms\Element\Data\ElementActivity, CraftCms\Cms\Element\Enums\ElementActivityType, and CraftCms\Cms\Support\Facades\ElementActivity.
    • Deprecated craft\services\Elements::getRecentActivity(). CraftCms\Cms\Element\ElementActivity::getRecentActivity() should be used instead.
    • Deprecated craft\services\Elements::trackActivity(). CraftCms\Cms\Element\ElementActivity::trackActivity() should be used instead.
  • Added 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.
  • Added Laravel-native element action classes under CraftCms\Cms\Element\Actions, CraftCms\Cms\Asset\Actions, CraftCms\Cms\Entry\Actions, and CraftCms\Cms\User\Actions.
  • Added 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.
  • Added Laravel-native element exporter classes under CraftCms\Cms\Element\Exporters.
  • Deprecated craft\errors\InvalidTypeException. CraftCms\Cms\Element\Exceptions\InvalidTypeException should be used instead.
  • Deprecated craft\errors\UnsupportedSiteException. CraftCms\Cms\Element\Exceptions\UnsupportedSiteException should be used instead.
  • Deprecated 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.
  • Deprecated craft\base\ElementExporter, craft\base\ElementExporterInterface, and the legacy craft\elements\exporters\* classes. The corresponding CraftCms\Cms\Element\Exporters\* classes should be used instead.

Validation

Craft 6 introduces a new validation system that uses Laravel's Validator instead of Yii2's model validation.

Added
  • Added CraftCms\Cms\Validation\Contracts\Validatable interface for classes that support Laravel-style validation.
  • Added CraftCms\Cms\Validation\Contracts\ValidatableWithRuleset interface for classes that use a Ruleset class to define validation rules.
  • Added CraftCms\Cms\Validation\Ruleset abstract class for defining validation rules, messages, and preparation logic.
  • Added CraftCms\Cms\Validation\Attributes\Ruleset PHP attribute for specifying a component's ruleset class.
  • Added CraftCms\Cms\Validation\Concerns\Validates trait for simple validation support.
  • Added CraftCms\Cms\Validation\Concerns\ValidatesWithRuleset trait for ruleset-based validation.
  • Added CraftCms\Cms\Validation\Concerns\HasScenarios trait for scenario-based validation filtering.
  • Added CraftCms\Cms\Validation\Concerns\InteractsWithValidator trait providing common validator interactions.
  • Added CraftCms\Cms\Element\Validation\ElementRules abstract class for defining element-specific validation rules.
  • Added CraftCms\Cms\Element\Validation\Events\ValidationRulesResolving event for plugins to modify element validation rules.
  • Added CraftCms\Cms\Element\Validation\Rules\ElementUriRule for validating element URIs.
  • Added element-specific ruleset classes:
    • CraftCms\Cms\Address\Validation\AddressRules
    • CraftCms\Cms\Asset\Validation\AssetRules
    • CraftCms\Cms\Entry\Validation\EntryRules
    • CraftCms\Cms\User\Validation\UserRules
    • CraftCms\Cms\Field\Elements\ContentBlockRules
  • Added CraftCms\Cms\Asset\Validation\Rules\AssetLocationRule for validating asset locations.
  • Added CraftCms\Cms\User\Validation\Rules\UserPasswordRule for validating user passwords.
  • Added CraftCms\Cms\User\Validation\Rules\UsernameRule for validating usernames.
  • Added CraftCms\Cms\Validation\Rules\UniqueCaseInsensitiveRule for case-insensitive unique validation.
  • Added CraftCms\Cms\Validation\Rules\DisallowMb4 for disallowing 4-byte UTF-8 characters.
  • Added CraftCms\Cms\Validation\Rules\MoneyRule for validating money values.
Changed
  • FieldInterface::getElementValidationRules() has been replaced by FieldInterface::getElementRules() which returns rules in Laravel's validation format.
  • Added FieldInterface::prepareForElementValidation() for preparing field values before validation.
  • Validation rules are now defined as Laravel-style arrays (e.g., ['required', 'string', 'max:255']).
Deprecations
  • Deprecated craft\base\Model::hasErrors(). Use ->errors()->has($attribute) or ->errors()->isNotEmpty() instead.
  • Deprecated craft\base\Model::getErrors(). Use ->errors()->get($attribute) or ->errors()->getMessages() instead.
  • Deprecated craft\base\Model::addErrors(). Use ->errors()->add($attribute, $message) instead.
  • Deprecated craft\base\Model::clearErrors(). Use ->errors()->forget() instead.
  • Deprecated CraftCms\Cms\Component\Concerns\ValidatableComponent. Use CraftCms\Cms\Validation\Concerns\Validates instead.
  • Deprecated CraftCms\Cms\Component\Contracts\ValidatableComponentInterface. Use CraftCms\Cms\Validation\Contracts\Validatable instead.
  • Deprecated \craft\records\ContentBlock. \CraftCms\Cms\Element\Models\ContentBlock should be used instead.
  • Deprecated \craft\records\Draft. \CraftCms\Cms\Element\Models\Draft should be used instead.
  • Deprecated \craft\records\Element. \CraftCms\Cms\Element\Models\Element should be used instead.
  • Deprecated \craft\records\Element_SiteSettings. \CraftCms\Cms\Element\Models\ElementSiteSettings should be used instead.
  • Deprecated \craft\records\Revision. \CraftCms\Cms\Element\Models\Revision should be used instead.

ElementSources

  • Deprecated craft\services\ElementSources. CraftCms\Cms\Element\ElementSources should be used instead.
  • Deprecated craft\events\DefineSourceSortOptionsEvent. CraftCms\Cms\Element\Events\ElementSourceSortOptionsResolving should be used instead.
  • Deprecated craft\events\DefineSourceTableAttributesEvent. CraftCms\Cms\Element\Events\ElementSourceTableAttributesResolving should be used instead.

Element Queries

  • Deprecated craft\elements\db\ElementRelationParamParser. CraftCms\Cms\Database\ElementRelationParamFilter should be used instead.
  • Deprecated craft\elements\db\NestedElementQueryInterface. CraftCms\Cms\Element\Queries\Contracts\NestedElementQueryInterface should be used instead.
  • Deprecated craft\elements\db\NestedElementQueryTrait. CraftCms\Cms\Element\Queries\Concerns\QueriesNestedElements should be used instead.
  • Deprecated craft\elements\db\OrderByPlaceholderExpression. CraftCms\Cms\Database\Expressions\OrderByPlaceholderExpression should be used instead.
  • Deprecated \craft\elements\db\AddressQuery. \CraftCms\Cms\Element\Queries\AddressQuery should be used instead.
  • Deprecated \craft\elements\db\AssetQuery \CraftCms\Cms\Element\Queries\AssetQuery should be used instead.
  • Deprecated \craft\elements\db\ContentBlockQuery \CraftCms\Cms\Element\Queries\ContentBlockQuery should be used instead.
  • Deprecated \craft\elements\db\ElementQuery \CraftCms\Cms\Element\Queries\ElementQuery should be used instead.
  • Deprecated \craft\elements\db\ElementQueryInterface
  • Deprecated \craft\elements\db\EntryQuery \CraftCms\Cms\Element\Queries\EntryQuery should be used instead.
  • Deprecated \craft\elements\db\UserQuery \CraftCms\Cms\Element\Queries\UserQuery should be used instead.

Entries & Entry Types

  • Updated entry type table pagination to return Laravel-style pagination metadata and use the configured GeneralConfig::$pageTrigger query parameter.
  • Deprecated craft\services\Entries. CraftCms\Cms\Entry\Entries and CraftCms\Cms\Entry\EntryTypes should be used instead.
  • Deprecated craft\models\EntryType. CraftCms\Cms\Entry\Data\EntryType should be used instead.
  • Deprecated craft\records\EntryType. CraftCms\Cms\Entry\Models\EntryType should be used instead.
  • Deprecated craft\records\Entry. CraftCms\Cms\Entry\Models\Entry should be used instead.
  • Deprecated craft\errors\EntryTypeNotFoundException. CraftCms\Cms\Entry\Exceptions\EntryTypeNotFoundException should be used instead.
  • Deprecated craft\events\EntryTypeEvent. One of these should be used instead:
    • craft\services\Entries::EVENT_BEFORE_DELETE_ENTRY_TYPE => CraftCms\Cms\Section\Events\DeletingEntryType
    • craft\services\Entries::EVENT_BEFORE_APPLY_ENTRY_TYPE_DELETE => CraftCms\Cms\Entry\Events\ApplyingEntryTypeDelete
    • craft\services\Entries::EVENT_AFTER_DELETE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeDeleted
    • craft\services\Entries::EVENT_BEFORE_SAVE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeSaving
    • craft\services\Entries::EVENT_AFTER_SAVE_ENTRY_TYPE => CraftCms\Cms\Entry\Events\EntryTypeSaved
  • Removed craft\controllers\EntriesController. The following controllers now implement this functionality:
    • CraftCms\Cms\Http\Controllers\Entries\CreateEntryController
    • CraftCms\Cms\Http\Controllers\Entries\EntriesIndexController
    • CraftCms\Cms\Http\Controllers\Entries\MoveEntryToSectionController
    • CraftCms\Cms\Http\Controllers\Entries\StoreEntryController
  • Removed craft\controllers\EntryTypesController in favor of CraftCms\Cms\Http\Controllers\EntryTypesController
  • Removed craft\console\controllers\EntryTypesController in favor of:
    • CraftCms\Cms\Entry\Commands\MergeEntryTypesCommand

Component

  • Added CraftCms\Cms\Component\Component base class, replacing Yii2's BaseObject/Component with config hydration, magic getters/setters, and Arrayable support.
  • Added CraftCms\Cms\Component\Exceptions\InvalidCallException, replacing yii\base\InvalidCallException.
  • Added CraftCms\Cms\Component\Exceptions\UnknownPropertyException, replacing yii\base\UnknownPropertyException.

Field Layouts

Added

  • Added CraftCms\Cms\FieldLayout\FieldLayoutForm.
  • Added CraftCms\Cms\FieldLayout\FieldLayoutFormTab.
  • Added CraftCms\Cms\FieldLayout\FieldLayoutFormElement.
  • Added CraftCms\Cms\FieldLayout\FieldLayoutServiceProvider.
  • Added CraftCms\Cms\FieldLayout\Concerns\HasFieldLayout trait.

Deprecations

  • Deprecated craft\models\FieldLayout. CraftCms\Cms\FieldLayout\FieldLayout should be used instead.
  • Deprecated craft\models\FieldLayoutTab. CraftCms\Cms\FieldLayout\FieldLayoutTab should be used instead.
  • Deprecated craft\base\FieldLayoutComponent. CraftCms\Cms\FieldLayout\FieldLayoutComponent should be used instead.
  • Deprecated craft\base\FieldLayoutElement. CraftCms\Cms\FieldLayout\FieldLayoutElement should be used instead.
  • Deprecated craft\base\FieldLayoutProviderInterface. CraftCms\Cms\FieldLayout\Contracts\FieldLayoutProviderInterface should be used instead.
  • Deprecated craft\records\FieldLayout. CraftCms\Cms\FieldLayout\Models\FieldLayout should be used instead.
  • Deprecated craft\fieldlayoutelements\BaseField. CraftCms\Cms\FieldLayout\LayoutElements\BaseField should be used instead.
  • Deprecated craft\fieldlayoutelements\BaseNativeField. CraftCms\Cms\FieldLayout\LayoutElements\BaseNativeField should be used instead.
  • Deprecated craft\fieldlayoutelements\BaseUiElement. CraftCms\Cms\FieldLayout\LayoutElements\BaseUiElement should be used instead.
  • Deprecated craft\fieldlayoutelements\CustomField. CraftCms\Cms\FieldLayout\LayoutElements\CustomField should be used instead.
  • Deprecated craft\fieldlayoutelements\Heading. CraftCms\Cms\FieldLayout\LayoutElements\Heading should be used instead.
  • Deprecated craft\fieldlayoutelements\HorizontalRule. CraftCms\Cms\FieldLayout\LayoutElements\HorizontalRule should be used instead.
  • Deprecated craft\fieldlayoutelements\Html. CraftCms\Cms\FieldLayout\LayoutElements\Html should be used instead.
  • Deprecated craft\fieldlayoutelements\LineBreak. CraftCms\Cms\FieldLayout\LayoutElements\LineBreak should be used instead.
  • Deprecated craft\fieldlayoutelements\Markdown. CraftCms\Cms\FieldLayout\LayoutElements\Markdown should be used instead.
  • Deprecated craft\fieldlayoutelements\Template. CraftCms\Cms\FieldLayout\LayoutElements\Template should be used instead.
  • Deprecated craft\fieldlayoutelements\TextField. CraftCms\Cms\FieldLayout\LayoutElements\TextField should be used instead.
  • Deprecated craft\fieldlayoutelements\TextareaField. CraftCms\Cms\FieldLayout\LayoutElements\TextareaField should be used instead.
  • Deprecated craft\fieldlayoutelements\Tip. CraftCms\Cms\FieldLayout\LayoutElements\Tip should be used instead.
  • Deprecated craft\fieldlayoutelements\TitleField. CraftCms\Cms\FieldLayout\LayoutElements\TitleField should be used instead.
  • Deprecated craft\fieldlayoutelements\FullNameField. CraftCms\Cms\FieldLayout\LayoutElements\FullNameField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\AddressField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\AddressField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\CountryCodeField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\CountryCodeField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\LabelField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\LabelField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\LatLongField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\LatLongField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\OrganizationField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\OrganizationField should be used instead.
  • Deprecated craft\fieldlayoutelements\addresses\OrganizationTaxIdField. CraftCms\Cms\FieldLayout\LayoutElements\addresses\OrganizationTaxIdField should be used instead.
  • Deprecated craft\fieldlayoutelements\assets\AssetTitleField. CraftCms\Cms\FieldLayout\LayoutElements\assets\AssetTitleField should be used instead.
  • Deprecated craft\fieldlayoutelements\assets\AltField. CraftCms\Cms\FieldLayout\LayoutElements\assets\AltField should be used instead.
  • Deprecated craft\fieldlayoutelements\entries\EntryTitleField. CraftCms\Cms\FieldLayout\LayoutElements\Entries\EntryTitleField should be used instead.
  • Deprecated craft\fieldlayoutelements\users\UsernameField. CraftCms\Cms\FieldLayout\LayoutElements\Users\UsernameField should be used instead.
  • Deprecated craft\fieldlayoutelements\users\FullNameField. CraftCms\Cms\FieldLayout\LayoutElements\Users\FullNameField should be used instead.
  • Deprecated craft\fieldlayoutelements\users\EmailField. CraftCms\Cms\FieldLayout\LayoutElements\Users\EmailField should be used instead.
  • Deprecated craft\fieldlayoutelements\users\AffiliatedSiteField. CraftCms\Cms\FieldLayout\LayoutElements\Users\AffiliatedSiteField should be used instead.
  • Deprecated craft\fieldlayoutelements\users\PhotoField. CraftCms\Cms\FieldLayout\LayoutElements\Users\PhotoField should be used instead.
  • Deprecated craft\events\CreateFieldLayoutFormEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutFormCreating should be used instead.
  • Deprecated craft\events\DefineFieldLayoutCustomFieldsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutCustomFieldsResolving should be used instead.
  • Deprecated craft\events\DefineFieldLayoutElementsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutUIElementsResolving should be used instead.
  • Deprecated craft\events\DefineFieldLayoutFieldsEvent. CraftCms\Cms\FieldLayout\Events\NativeFieldsResolving should be used instead.
  • Deprecated craft\events\DefineShowFieldLayoutComponentInFormEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutComponentShowInFormResolving should be used instead.
  • Deprecated craft\events\DefineFieldActionsEvent. CraftCms\Cms\FieldLayout\Events\FieldLayoutActionMenuItemsResolving should be used instead.

Fields

  • Updated field index pagination to return Laravel-style pagination metadata and use the configured GeneralConfig::$pageTrigger query parameter.
  • Removed craft\controllers\FieldsController in favor of CraftCms\Cms\Http\Controllers\FieldsController.
  • Removed craft\controllers\MatrixController. CraftCms\Cms\Http\Controllers\MatrixController should be used instead.
  • Removed craft\controllers\RelationalFieldsController. CraftCms\Cms\Http\Controllers\RelationalFieldsController should be used instead.
  • Deprecated craft\errors\InvalidFieldException. CraftCms\Cms\Field\Exceptions\InvalidFieldException should be used instead.
  • Deprecated craft\fields\data\ColorData. CraftCms\Cms\Field\Data\ColorData should be used instead.
  • Deprecated craft\fields\data\IconData. CraftCms\Cms\Field\Data\IconData should be used instead.
  • Deprecated craft\fields\data\JsonData. CraftCms\Cms\Field\Data\JsonData should be used instead.
  • Deprecated craft\fields\data\LinkData. CraftCms\Cms\Field\Data\LinkData should be used instead.
  • Deprecated craft\fields\data\MultiOptionsFieldData. CraftCms\Cms\Field\Data\MultiOptionsFieldData should be used instead.
  • Deprecated craft\fields\data\OptionData. CraftCms\Cms\Field\Data\OptionData should be used instead.
  • Deprecated craft\fields\data\SingleOptionFieldData. CraftCms\Cms\Field\Data\SingleOptionFieldData should be used instead.
  • Deprecated craft\fields\linktypes\Asset. CraftCms\Cms\Field\LinkTypes\Asset should be used instead.
  • Deprecated craft\fields\linktypes\BaseElementLinkType. CraftCms\Cms\Field\LinkTypes\BaseElementLinkType should be used instead.
  • Deprecated craft\fields\linktypes\BaseLinkType. CraftCms\Cms\Field\LinkTypes\BaseLinkType should be used instead.
  • Deprecated craft\fields\linktypes\BaseTextLinkType. CraftCms\Cms\Field\LinkTypes\BaseTextLinkType should be used instead.
  • Deprecated craft\fields\linktypes\Category. CraftCms\Cms\Field\LinkTypes\Category should be used instead.
  • Deprecated craft\fields\linktypes\Email. CraftCms\Cms\Field\LinkTypes\Email should be used instead.
  • Deprecated craft\fields\linktypes\Entry. CraftCms\Cms\Field\LinkTypes\Entry should be used instead.
  • Deprecated craft\fields\linktypes\Phone. CraftCms\Cms\Field\LinkTypes\Phone should be used instead.
  • Deprecated craft\fields\linktypes\Sms. CraftCms\Cms\Field\LinkTypes\Sms should be used instead.
  • Deprecated craft\fields\linktypes\Url. CraftCms\Cms\Field\LinkTypes\Url should be used instead.
  • Deprecated craft\fields\Addresses. CraftCms\Cms\Field\Addresses should be used instead.
  • Deprecated craft\fields\Assets. CraftCms\Cms\Field\Assets should be used instead.
  • Deprecated craft\fields\BaseOptionsField. CraftCms\Cms\Field\BaseOptionsField should be used instead.
  • Deprecated craft\fields\BaseRelationField. CraftCms\Cms\Field\BaseRelationField should be used instead.
  • Deprecated craft\fields\ButtonGroup. CraftCms\Cms\Field\ButtonGroup should be used instead.
  • Deprecated craft\fields\Categories. CraftCms\Cms\Field\Categories should be used instead.
  • Deprecated craft\fields\Checkboxes. CraftCms\Cms\Field\Checkboxes should be used instead.
  • Deprecated craft\fields\Color. CraftCms\Cms\Field\Color should be used instead.
  • Deprecated craft\fields\ContentBlock. CraftCms\Cms\Field\ContentBlock should be used instead.
  • Deprecated craft\fields\Country. CraftCms\Cms\Field\Country should be used instead.
  • Deprecated craft\fields\Date. CraftCms\Cms\Field\Date should be used instead.
  • Deprecated craft\fields\Dropdown. CraftCms\Cms\Field\Dropdown should be used instead.
  • Deprecated craft\fields\Email. CraftCms\Cms\Field\Email should be used instead.
  • Deprecated craft\fields\Entries. CraftCms\Cms\Field\Entries should be used instead.
  • Deprecated craft\fields\Icon. CraftCms\Cms\Field\Icon should be used instead.
  • Deprecated craft\fields\Json. CraftCms\Cms\Field\Json should be used instead.
  • Deprecated craft\fields\Lightswitch. CraftCms\Cms\Field\Lightswitch should be used instead.
  • Deprecated craft\fields\Link. CraftCms\Cms\Field\Link should be used instead.
  • Deprecated craft\fields\Matrix. CraftCms\Cms\Field\Matrix should be used instead.
  • Deprecated craft\fields\MissingField. CraftCms\Cms\Field\MissingField should be used instead.
  • Deprecated craft\fields\Money. CraftCms\Cms\Field\Money should be used instead.
  • Deprecated craft\fields\MultiSelect. CraftCms\Cms\Field\MultiSelect should be used instead.
  • Deprecated craft\fields\Number. CraftCms\Cms\Field\Number should be used instead.
  • Deprecated craft\fields\PlainText. CraftCms\Cms\Field\PlainText should be used instead.
  • Deprecated craft\fields\RadioButtons. CraftCms\Cms\Field\RadioButtons should be used instead.
  • Deprecated craft\fields\Range. CraftCms\Cms\Field\Range should be used instead.
  • Deprecated craft\fields\Table. CraftCms\Cms\Field\Table should be used instead.
  • Deprecated craft\fields\Tags. CraftCms\Cms\Field\Tags should be used instead.
  • Deprecated craft\fields\Time. CraftCms\Cms\Field\Time should be used instead.
  • Deprecated craft\fields\Url. CraftCms\Cms\Field\Url should be used instead.
  • Deprecated craft\fields\Users. CraftCms\Cms\Field\Users should be used instead.
  • Deprecated craft\services\Fields. CraftCms\Cms\Field\Fields should be used instead.

Filesystems

  • Deprecated craft\errors\InvalidSubpathException. CraftCms\Cms\Filesystem\Exceptions\InvalidSubpathException should be used instead.

GQL

  • Deprecated \craft\records\GqlSchema. \CraftCms\Cms\Gql\Models\GqlSchema should be used instead.
  • Deprecated \craft\records\GqlToken. \CraftCms\Cms\Gql\Models\GqlToken should be used instead.

HTTP

  • Deprecated craft\config\GeneralConfig::$errorTemplatePrefix and craft\config\GeneralConfig::errorTemplatePrefix(). Configure Laravel's custom error pages instead.
  • Deprecated craft\filters\BasicHttpAuthLogin. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)
  • Deprecated craft\filters\BasicHttpAuthStatic. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)
  • Deprecated craft\filters\BasicHttpAuthTrait. Use the auth.basic middleware instead. (see https://laravel.com/docs/12.x/authentication#http-basic-authentication)
  • Deprecated craft\filters\Cors. Use Laravel's CORS settings instead. (see https://laravel.com/docs/12.x/routing#cors)
  • Deprecated craft\filters\Headers. Use Laravel middleware instead. (see https://laravel.com/docs/middleware)
  • Deprecated craft\filters\ConditionalFilterTrait.
  • Deprecated craft\filters\SiteFilterTrait.
  • Deprecated craft\filters\UtilityAccess.
  • Deprecated craft\controllers\AppController::actionLicensingIssues(). CraftCms\Cms\Http\Middleware\EnforceLicenses should be used instead.
  • Removed craft\controllers\AppController::actionHealthCheck(). CraftCms\Cms\Http\Controllers\App\HealthCheckController should be used instead.
  • Removed craft\controllers\AppController::actionGetCpAlerts() and actionShunCpAlert(). CraftCms\Cms\Http\Controllers\App\CpAlertsController should be used instead.
  • Removed craft\controllers\AppController::actionIconPickerOptions(). Use CraftCms\Cms\Http\Controllers\IconController::pickerOptions() instead.
  • Removed craft\controllers\AppController::actionSetLicenseShunCookie(). CraftCms\Cms\Http\Controllers\App\LicensesController::setShunCookie() should be used instead.
  • Removed craft\controllers\AppController::actionGetPluginLicenseInfo() and actionUpdatePluginLicense(). CraftCms\Cms\Http\Controllers\App\PluginsController should be used instead.
  • Removed craft\controllers\AppController::actionBrokenImage(). CraftCms\Cms\Http\Middleware\ShowBrokenImage should be used instead.
  • Removed craft\controllers\AppController::actionRenderElements() and actionRenderComponents(). CraftCms\Cms\Http\Controllers\App\RenderController should be used instead.
  • Removed craft\controllers\NotFoundController. Laravel's exception handling should be used instead.
  • Removed the header-setting logic in yii2-adapter\legacy\web\Application. The new \CraftCms\Cms\Http\Middleware\SetHeaders middleware handles this functionality.
  • Removed the licensing issues screen logic in yii2-adapter\legacy\web\Application. The new \CraftCms\Cms\Http\Middleware\EnforceLicenses middleware handles this functionality.
  • Removed craft\controllers\AppController::actionTryEdition() and actionSwitchToLicensedEdition() in favor of CraftCms\Cms\Http\Controllers\EditionController.

Mail

  • Added CraftCms\Cms\Email\Commands\SendTestMailCommand.
  • Added CraftCms\Cms\Email\Mailables\CraftMailable, a base mailable class that automatically applies project config email settings (from, replyTo, mailer) with site-specific overrides.
  • Added CraftCms\Cms\SystemMessage\Mailables\SystemMessageMailable.
  • Deprecated Craft::$app->getMailer(). Laravel mailers/drivers and CraftCms\Cms\SystemMessage\SystemMessages::mailable() should be used instead.
  • Deprecated craft\mail\Mailer. Laravel mailers/drivers and CraftCms\Cms\SystemMessage\SystemMessages::mailable() should be used instead.
  • Deprecated craft\helpers\MailerHelper. Laravel mail configuration and drivers should be used instead.
  • Deprecated craft\config\GeneralConfig::$testToEmailAddress and craft\config\GeneralConfig::testToEmailAddress(). Illuminate\Support\Facades\Mail::alwaysTo() should be used instead.
  • Deprecated 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.
  • Removed legacy projectConfig.email mail settings and mail transport adapter configuration in favor of Laravel's mail config and drivers.

Migrations

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.

  • Deprecated craft\db\Migration. CraftCms\Cms\Database\Migration should be used instead.
  • Deprecated craft\db\MigrationManager
  • Removed craft\helpers\MigrationHelper as it was deprecated since 4.0.0.
  • Removed craft\console\controllers\InstallController in favor of:
    • CraftCms\Cms\Console\Commands\InstallCommand
    • CraftCms\Cms\Console\Commands\InstallCheckCommand
  • Removed craft\console\controllers\MigrateController in favor of:
    • CraftCms\Cms\Database\Commands\MigrateCommand
  • Removed craft\console\controllers\UpController in favor of:
    • CraftCms\Cms\Console\Commands\UpCommand

Plugins

Added

  • The base CraftCms\Cms\Plugin\Plugin class is now a Laravel ServiceProvider which provides a new way to register components for your plugins.

Deprecations

  • Deprecated craft\services\Plugins. CraftCms\Cms\Plugin\Plugins should be used instead.
  • Deprecated craft\base\Plugin. CraftCms\Cms\Plugin\Plugin should be used instead.
  • Deprecated craft\base\PluginTrait.
  • Deprecated craft\base\PluginInterface. CraftCms\Cms\Plugin\Contracts\PluginInterface should be used instead.
  • Deprecated craft\errors\InvalidPluginException. CraftCms\Cms\Plugin\Exceptions\InvalidPluginException should be used instead.
  • Deprecated craft\errors\InvalidLicenseKeyException. CraftCms\Cms\Plugin\Exceptions\InvalidLicenseKeyException should be used instead.

Controllers

  • Removed craft\controllers\PluginsController. Use CraftCms\Cms\Http\Controllers\PluginsController instead.

Commands

  • Removed craft\console\controllers\PluginController in favor of:
    • CraftCms\Cms\Plugin\Commands\DisableCommand -> php craft plugin:disable
    • CraftCms\Cms\Plugin\Commands\EnableCommand -> php craft plugin:enable
    • CraftCms\Cms\Plugin\Commands\InstallCommand -> php craft plugin:install
    • CraftCms\Cms\Plugin\Commands\UninstallCommand -> php craft plugin:uninstall
    • CraftCms\Cms\Plugin\Commands\ListCommand -> php craft plugin:list

Events

  • Deprecated craft\events\PluginEvent in favor of the following new events:
    • craft\base\Plugin::EVENT_BEFORE_SAVE_SETTINGS => CraftCms\Cms\Component\Events\ComponentEvent
    • craft\base\Plugin::EVENT_AFTER_SAVE_SETTINGS => CraftCms\Cms\Component\Events\ComponentEvent
    • craft\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

  • Added Request::isPreview() macro for detecting preview requests via x-craft-preview or x-craft-live-preview parameters.
  • Added Request::isCpRequest(), Request::isSiteRequest(), Request::isActionRequest(), Request::actionSegments(), Request::actionSegmentsToRoute(), Request::duplicateWithUri(), Request::getToken(), and Request::getSigned() macros.
  • Updated paginated requests to resolve the current page from the configured GeneralConfig::$pageTrigger query parameter rather than path-style pagination segments.

Security

  • Added CraftCms\Cms\Support\Security.
  • Added CraftCms\Cms\Support\Facades\Security.
  • Added CraftCms\Cms\Http\Middleware\AddLogContext.
  • Deprecated Craft::$app->getSecurity() in favor of Laravel's Hash and Crypt facades, or CraftCms\Cms\Support\Facades\Security.
  • Deprecated GeneralConfig::$blowfishHashCost in favor of Laravel's hashing.bcrypt.rounds config or the BCRYPT_ROUNDS environment variable.

Updates

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\ConfigSyncController
  • craft\controllers\InstallController => CraftCms\Cms\Http\Controllers\InstallController
  • craft\controllers\MigrateController => CraftCms\Cms\Http\Controllers\MigrateController
  • craft\controllers\PluginStoreController => CraftCms\Cms\Http\Controllers\PluginStore\PluginStoreController
  • craft\controllers\PluginStore\InstallController => CraftCms\Cms\Http\Controllers\PluginStore\InstallController
  • craft\controllers\PluginStore\RemoveController => CraftCms\Cms\Http\Controllers\PluginStore\RemoveController
  • craft\controllers\UpdaterController => CraftCms\Cms\Http\Controllers\Updates\UpdaterController
  • craft\controllers\UpdatesController => CraftCms\Cms\Http\Controllers\Updates\UpdatesController
  • craft\console\controllers\UpdateController in favor of these commands:
    • CraftCms\Cms\Update\Commands\UpdateCommand
    • CraftCms\Cms\Update\Commands\ComposerInstallCommand
    • CraftCms\Cms\Update\Commands\InfoCommand
Deprecations & removals
  • Deprecated craft\helpers\Install. CraftCms\Cms\Site\Concerns\SiteDefaults should be used instead.
  • Deprecated craft\helpers\Update. The only method was checkPhpConstraint which is now available on CraftCms\Cms\Support\PHP::checkConstraint()
  • Removed craft\events\UpdateReleaseEvent in favor of CraftCms\Cms\Update\Events\CriticalUpdateReleasedEvent
  • Removed craft\models\Update. CraftCms\Cms\Update\Data\Update should be used instead.
  • Removed craft\models\UpdateRelease. CraftCms\Cms\Update\Data\UpdateRelease should be used instead.
  • Removed craft\models\Updates. CraftCms\Cms\Update\Data\Updates should be used instead.

Users

  • Removed craft\console\controllers\UsersController in favor of the following commands (signatures are the same):
    • CraftCms\Cms\User\Commands\ActivationUrlCommand
    • CraftCms\Cms\User\Commands\CreateCommand
    • CraftCms\Cms\User\Commands\DeleteCommand
    • CraftCms\Cms\User\Commands\ImpersonateCommand
    • CraftCms\Cms\User\Commands\ListAdminsCommand
    • CraftCms\Cms\User\Commands\LogoutAllCommand
    • CraftCms\Cms\User\Commands\PasswordResetUrlCommand
    • CraftCms\Cms\User\Commands\Remove2faCommand
    • CraftCms\Cms\User\Commands\SetPasswordCommand
    • CraftCms\Cms\User\Commands\UnlockCommand

Project Config

  • Deprecated craft\services\ProjectConfig. CraftCms\Cms\ProjectConfig\ProjectConfig should be used instead.
  • Removed craft\controllers\ProjectConfigController in favor of CraftCms\Cms\Http\Controllers\Utilities\ProjectConfigController
  • Removed craft\console\controllers\PcController & craft\console\controllers\ProjectConfigController in favor of the following commands:
    • CraftCms\Cms\ProjectConfig\Commands\ApplyCommand
    • CraftCms\Cms\ProjectConfig\Commands\DiffCommand
    • CraftCms\Cms\ProjectConfig\Commands\ExportCommand
    • CraftCms\Cms\ProjectConfig\Commands\GetCommand
    • CraftCms\Cms\ProjectConfig\Commands\RebuildCommand
    • CraftCms\Cms\ProjectConfig\Commands\RemoveCommand
    • CraftCms\Cms\ProjectConfig\Commands\SetCommand
    • CraftCms\Cms\ProjectConfig\Commands\TouchCommand
    • CraftCms\Cms\ProjectConfig\Commands\WriteCommand
    • All commands can be called using either php craft project-config or php craft pc
  • Deprecated craft\events\ConfigEvent in favor of the following events:
    • CraftCms\Cms\ProjectConfig\Events\ProjectConfigItemAdding
    • CraftCms\Cms\ProjectConfig\Events\ItemAdded
    • CraftCms\Cms\ProjectConfig\Events\ProjectConfigItemUpdated
    • CraftCms\Cms\ProjectConfig\Events\ItemUpdated
    • CraftCms\Cms\ProjectConfig\Events\ProjectConfigItemRemoved
    • CraftCms\Cms\ProjectConfig\Events\ItemRemoved
  • Deprecated craft\services\ProjectConfig::EVENT_AFTER_APPLY_CHANGES
    • Added CraftCms\Cms\ProjectConfig\Events\ChangesApplied
  • Deprecated craft\services\ProjectConfig::EVENT_AFTER_WRITE_YAML_FILES
  • Added CraftCms\Cms\ProjectConfig\Events\YamlFilesWritten
  • Deprecated craft\services\ProjectConfig::EVENT_REBUILD
    • Added CraftCms\Cms\ProjectConfig\Events\ProjectConfigRebuilt
  • Removed craft\errors\BusyResourceException in favor of CraftCms\Cms\ProjectConfig\Exceptions\BusyResourceException
  • Removed craft\errors\StaleResourceException in favor of CraftCms\Cms\ProjectConfig\Exceptions\StaleResourceException
  • Added CraftCms\Cms\ProjectConfig\Exceptions\ReadonlyException
  • Removed craft\models\ProjectConfigData in favor of CraftCms\Cms\ProjectConfig\Data\ProjectConfigData
  • Removed craft\models\ReadOnlyProjectConfigData in favor of CraftCms\Cms\ProjectConfig\Data\ReadOnlyProjectConfigData
  • Deprecated craft\helpers\ProjectConfig. CraftCms\Cms\ProjectConfig\ProjectConfigHelper should be used instead.

Revisions

  • Deprecated craft\services\Revisions. CraftCms\Cms\Element\Revisions should be used instead.
  • Deprecated craft\events\RevisionEvent. One of the events extending CraftCms\Cms\Element\Events\RevisionEvent should be used instead.
  • Deprecated craft\behaviors\RevisionBehavior. CraftCms\Cms\Element\Concerns\Revisionable should be used instead.

Routes

  • Deprecated craft\services\Routes. CraftCms\Cms\Route\Routes should be used instead.
  • Using routes in config/routes.php is no longer supported. Register routes using Laravel's routing instead.

Search

  • Added CraftCms\Cms\Support\Facades\Search.
  • Deprecated craft\services\Search. CraftCms\Cms\Search\Search should be used instead.
  • Deprecated Craft::$app->getSearch(). CraftCms\Cms\Support\Facades\Search or app(CraftCms\Cms\Search\Search::class) should be used instead.
  • Deprecated craft\search\SearchQuery. CraftCms\Cms\Search\SearchQuery should be used instead.
  • Deprecated craft\search\SearchQueryTerm. CraftCms\Cms\Search\SearchQueryTerm should be used instead.
  • Deprecated craft\search\SearchQueryTermGroup. CraftCms\Cms\Search\SearchQueryTermGroup should be used instead.
  • Deprecated craft\events\SearchEvent in favor of the following new events:
    • craft\services\Search::EVENT_BEFORE_SEARCH => CraftCms\Cms\Search\Events\SearchStarting
    • craft\services\Search::EVENT_AFTER_SEARCH => CraftCms\Cms\Search\Events\SearchPerformed
    • craft\services\Search::EVENT_BEFORE_SCORE_RESULTS => CraftCms\Cms\Search\Events\ScoringResults
  • Deprecated craft\events\IndexKeywordsEvent. CraftCms\Cms\Search\Events\KeywordsIndexing should be used instead.

Sections

  • Updated section index pagination to return Laravel-style pagination metadata and use the configured GeneralConfig::$pageTrigger query parameter.
  • Deprecated the section related methods in craft\services\Entries. CraftCms\Cms\Section\Sections should be used instead.
  • Deprecated craft\models\Section. CraftCms\Cms\Section\Data\Section should be used instead.
  • Deprecated craft\records\Section. CraftCms\Cms\Section\Models\Section should be used instead.
  • Deprecated craft\models\Section_SiteSettings. CraftCms\Cms\Section\Data\SectionSiteSettings should be used instead.
  • Deprecated craft\records\Section_SiteSettings. CraftCms\Cms\Section\Models\SectionSiteSettings should be used instead.
  • Deprecated craft\events\SectionEvent. One of these should be used instead:
    • craft\services\Entries::EVENT_BEFORE_DELETE_SECTION => CraftCms\Cms\Section\Events\SectionDeleting
    • craft\services\Entries::EVENT_BEFORE_APPLY_SECTION_DELETE => CraftCms\Cms\Section\Events\SectionDeletionApplying
    • craft\services\Entries::EVENT_AFTER_DELETE_SECTION => CraftCms\Cms\Section\Events\SectionDeleted
    • craft\services\Entries::EVENT_BEFORE_SAVE_SECTION => CraftCms\Cms\Section\Events\SectionSaving
    • craft\services\Entries::EVENT_AFTER_SAVE_SECTION => CraftCms\Cms\Section\Events\SectionSaved
  • Removed craft\controllers\SectionsController in favor of CraftCms\Cms\Http\Controllers\SectionsController
  • Removed craft\console\controllers\SectionsController in favor of:
    • CraftCms\Cms\Section\Commands\CreateCommand
    • CraftCms\Cms\Section\Commands\DeleteCommand
  • Added CraftCms\Cms\Section\Enums\DefaultPlacement
  • Added CraftCms\Cms\Section\Enums\SectionType
  • Deprecated craft\errors\SectionNotFoundException. CraftCms\Cms\Section\Exceptions\SectionNotFoundException should be used instead.

Sites

  • 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\SitesController
    • CraftCms\Cms\Http\Controllers\Settings\SiteGroupsController

Structures

  • Deprecated craft\services\Structures. CraftCms\Cms\Structure\Structures should be used instead.
  • Deprecated craft\models\Structure. CraftCms\Cms\Structure\Data\Structure should be used instead.
  • Deprecated craft\records\Structure. CraftCms\Cms\Structure\Models\Structure should be used instead.
  • Deprecated craft\records\StructureElement. CraftCms\Cms\Structure\Models\StructureElement should be used instead.
  • Replaced craft\controllers\StructuresController. CraftCms\Cms\Http\Controllers\StructuresController.
  • Replaced structure related commands in craft\console\controllers\RepairController with:
    • \CraftCms\Cms\Structure\Commands\RepairCategoryGroupStructureCommand
    • \CraftCms\Cms\Structure\Commands\RepairSectionStructureCommand

System Messages

  • Deprecated craft\services\SystemMessages. CraftCms\Cms\SystemMessage\SystemMessages should be used instead.
  • Deprecated craft\models\SystemMessage and craft\records\SystemMessage. CraftCms\Cms\SystemMessage\Models\SystemMessage should be used instead.
  • Replaced craft\controllers\SystemMessagesController with CraftCms\Cms\Http\Controllers\Utilities\SystemMessagesController

Tokens

  • Deprecated craft\services\Tokens. CraftCms\Cms\RouteToken\RouteTokens should be used instead.
  • Deprecated craft\records\Token. CraftCms\Cms\RouteToken\Models\RouteToken should be used instead.

Twig

  • Updated Twig {% paginate %} queries to use Laravel paginators and generate query-string pagination URLs based on GeneralConfig::$pageTrigger.
  • Added CraftCms\Cms\Twig\Twig service for managing Twig environments, replacing the Twig management logic previously in craft\web\View.
  • Added CraftCms\Cms\Twig\TemplateRenderer for rendering templates, replacing the rendering logic previously in craft\web\View.
  • Added CraftCms\Cms\Twig\PageLifecycle for managing the page rendering lifecycle (head/body placeholder replacement), replacing the page lifecycle logic previously in craft\web\View.
  • Added CraftCms\Cms\Support\Facades\Twig facade, resolving to CraftCms\Cms\Twig\TemplateRenderer.
  • Added CraftCms\Cms\Twig\Environment, moved from craft\web\twig\Environment.
  • Added CraftCms\Cms\Twig\TemplateResolver.
  • Added CraftCms\Cms\Twig\TemplateLoader.
  • Added CraftCms\Cms\Twig\Exceptions\TemplateLoaderException.
  • Added helper functions in the CraftCms\Cms namespace: template(), sandboxedTemplate(), pageTemplate(), renderString(), renderSandboxedString(), renderObjectTemplate(), renderSandboxedObjectTemplate().
  • Added sanitize Twig filter for sanitizing HTML with CraftCms\Cms\Support\HtmlSanitizer\HtmlSanitizers.
  • Deprecated craft\web\View::getTwig(). CraftCms\Cms\Twig\Twig::get() should be used instead.
  • Deprecated craft\web\View::setTwig(). CraftCms\Cms\Twig\Twig::set() should be used instead.
  • Deprecated craft\web\View::createTwig(). CraftCms\Cms\Twig\Twig::create() should be used instead.
  • Deprecated craft\web\View::registerCpTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.
  • Deprecated craft\web\View::registerSiteTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.
  • Deprecated craft\web\View::registerTwigExtension(). CraftCms\Cms\Twig\Twig::registerExtension() should be used instead.
  • Deprecated craft\web\View::renderTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderTemplate() or the template() helper should be used instead.
  • Deprecated craft\web\View::renderSandboxedTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedTemplate() or the sandboxedTemplate() helper should be used instead.
  • Deprecated craft\web\View::renderPageTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderPageTemplate() or the pageTemplate() helper should be used instead.
  • Deprecated craft\web\View::renderString(). CraftCms\Cms\Twig\TemplateRenderer::renderString() or the renderString() helper should be used instead.
  • Deprecated craft\web\View::renderSandboxedString(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedString() or the renderSandboxedString() helper should be used instead.
  • Deprecated craft\web\View::renderObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderObjectTemplate() or the renderObjectTemplate() helper should be used instead.
  • Deprecated craft\web\View::renderSandboxedObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::renderSandboxedObjectTemplate() or the renderSandboxedObjectTemplate() helper should be used instead.
  • Deprecated craft\web\View::normalizeObjectTemplate(). CraftCms\Cms\Twig\TemplateRenderer::normalizeObjectTemplate() should be used instead.
  • Deprecated craft\web\View::getIsRenderingTemplate(). CraftCms\Cms\Twig\TemplateRenderer::isRenderingTemplate should be used instead.
  • Deprecated craft\web\View::getIsRenderingPageTemplate(). CraftCms\Cms\Twig\TemplateRenderer::isRenderingPageTemplate should be used instead.
  • Deprecated craft\web\twig\Environment. CraftCms\Cms\Twig\Environment should be used instead.
  • Deprecated craft\web\View::EVENT_AFTER_CREATE_TWIG. CraftCms\Cms\Twig\Events\TwigCreated should be used instead.
  • Deprecated craft\web\View::doesTemplateExist(). CraftCms\Cms\Twig\TemplateResolver::doesTemplateExist() should be used instead.
  • Deprecated craft\web\View::resolveTemplate(). CraftCms\Cms\Twig\TemplateResolver::resolveTemplate() should be used instead.
  • Deprecated craft\web\twig\TemplateLoader. CraftCms\Cms\Twig\TemplateLoader should be used instead.
  • Deprecated craft\web\twig\TemplateLoaderException. CraftCms\Cms\Twig\Exceptions\TemplateLoaderException should be used instead.

Events

  • Added CraftCms\Cms\Twig\Events\TwigCreated, dispatched when a Twig environment is created.
  • Added CraftCms\Cms\Twig\Events\TemplateRendering, dispatched before a template is rendered. Supports cancellation via ValidatableEvent.
  • Added CraftCms\Cms\Twig\Events\TemplateRendered, dispatched after a template is rendered. Has a mutable output property.
  • Added CraftCms\Cms\Twig\Events\PageTemplateRendering, dispatched before a page template is rendered. Supports cancellation via ValidatableEvent.
  • Added CraftCms\Cms\Twig\Events\PageTemplateRendered, dispatched after a page template is rendered. Has a mutable output property.
  • Added CraftCms\Cms\Twig\Events\PageStarting, dispatched when page rendering begins.
  • Added CraftCms\Cms\Twig\Events\PageEnded, dispatched when page rendering ends. Has nullable headHtml, bodyBeginHtml, and bodyEndHtml properties for overriding HtmlStack output.
  • Deprecated craft\web\View::EVENT_BEFORE_RENDER_TEMPLATE. CraftCms\Cms\Twig\Events\TemplateRendering should be used instead.
  • Deprecated craft\web\View::EVENT_AFTER_RENDER_TEMPLATE. CraftCms\Cms\Twig\Events\TemplateRendered should be used instead.
  • Deprecated craft\web\View::EVENT_BEFORE_RENDER_PAGE_TEMPLATE. CraftCms\Cms\Twig\Events\PageTemplateRendering should be used instead.
  • Deprecated craft\web\View::EVENT_AFTER_RENDER_PAGE_TEMPLATE. CraftCms\Cms\Twig\Events\PageTemplateRendered should be used instead.

Translations

  • Deprecated craft\i18n\FormatConverter. CraftCms\Cms\Translation\FormatConverter should be used instead.
  • Deprecated craft\i18n\Formatter. CraftCms\Cms\Translation\Formatter should be used instead.
  • Deprecated craft\i18n\I18N. CraftCms\Cms\Translation\I18N should be used instead.
  • Deprecated craft\i18n\Locale. CraftCms\Cms\Translation\Locale should be used instead.
  • Deprecated craft\i18n\MessageFormatter.
  • Deprecated craft\i18n\PhpMessageSource.
  • Deprecated craft\i18n\Translation. CraftCms\Cms\Support\Facades\I18N should be used instead.
  • Deprecated Craft::t. CraftCms\Cms\t should be used instead.

Users

  • 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.
  • Added CraftCms\Cms\User\Notifications\VerifyEmailNotification.
  • Users::purgeExpiredPendingUsers() now joins the password_reset_tokens table to find expired pending users.
  • Removed verificationCode and verificationCodeIssuedDate columns on the users table in favor of the password_reset_tokens table.
  • Deprecated craft\services\Users::isVerificationCodeValidForUser(). Password::broker('craft')->tokenExists($user, $code) should be used instead.
  • Removed craft\controllers\UsersController in favor of:
    • CraftCms\Cms\Http\Controllers\Users\ActivateController.
    • CraftCms\Cms\Http\Controllers\Users\PasswordController.
    • CraftCms\Cms\Http\Controllers\Users\SaveUserController.
  • Removed \craft\controllers\UserSettingsController in favor of:
    • CraftCms\Cms\Http\Controllers\Settings\UserGroupsController
    • CraftCms\Cms\Http\Controllers\Settings\UserSettingsController
  • Deprecated UserGroupEvent in favor of:
    • CraftCms\Cms\User\Events\UserGroupSaving
    • CraftCms\Cms\User\Events\UserGroupSaved
    • CraftCms\Cms\User\Events\UserGroupDeletionApplying
    • CraftCms\Cms\User\Events\UserGroupDeleting
    • CraftCms\Cms\User\Events\UserGroupDeleted
  • Deprecated \craft\exceptions\UserGroupNotFoundException.
  • Deprecated \craft\services\UserGroups. CraftCms\Cms\User\UserGroups should be used instead.
  • Deprecated \craft\models\UserGroup. CraftCms\Cms\User\Data\UserGroup should be used instead.
  • Deprecated \craft\records\User. \CraftCms\Cms\User\Models\User should be used instead.
  • Deprecated \craft\records\UserGroup. \CraftCms\Cms\User\Models\UserGroup should be used instead.
  • Deprecated \craft\records\UserPermission. \CraftCms\Cms\User\Models\UserPermission should be used instead.
  • Deprecated craft\services\UserPermissions. CraftCms\Cms\User\UserPermissions should be used instead.
  • Deprecated craft.app.userPermissions. craft.userPermissions should be used instead.
  • Deprecated craft\events\DefineEditUserScreensEvent. CraftCms\Cms\User\Events\EditUserScreensResolving should be used instead.

View

  • Added CraftCms\Cms\View\TwigEngine.
  • Added CraftCms\Cms\View\HtmlStack.
  • Added CraftCms\Cms\Support\Facades\HtmlStack.
  • Added CraftCms\Cms\View\Enums\Position enum.
  • Added CraftCms\Cms\View\InputNamespace.
  • Added CraftCms\Cms\Support\Facades\InputNamespace.
  • Added CraftCms\Cms\View\TemplateHooks.
  • Added CraftCms\Cms\Support\Facades\TemplateHooks.
  • Added CraftCms\Cms\View\DeltaRegistry.
  • Added CraftCms\Cms\Support\Facades\DeltaRegistry.
  • Added CraftCms\Cms\View\TemplateMode enum.
  • Added CraftCms\Cms\View\Events\CpTemplateRootsResolving.
  • Added CraftCms\Cms\View\Events\SiteTemplateRootsResolving.
  • Added CraftCms\Cms\View\TemplateCaches.
  • Added CraftCms\Cms\View\CacheCollectors\DependencyCollector.
  • Added CraftCms\Cms\View\CacheCollectors\ResourceCollector.
  • Added CraftCms\Cms\View\Contracts\CacheCollectorInterface.
  • Added CraftCms\Cms\View\Data\TemplateCacheContext.
  • Added CraftCms\Cms\View\Events\TemplateCacheCollectorsResolving.
  • Deprecated craft\services\TemplateCaches. CraftCms\Cms\View\TemplateCaches should be used instead.
  • Deprecated craft\web\View::registerJs(). CraftCms\Cms\View\HtmlStack::js() should be used instead.
  • Deprecated craft\web\View::registerJsWithVars(). CraftCms\Cms\View\HtmlStack::jsWithVars() should be used instead.
  • Deprecated craft\web\View::registerJsFile(). CraftCms\Cms\View\HtmlStack::jsFile() should be used instead.
  • Deprecated craft\web\View::registerCss(). CraftCms\Cms\View\HtmlStack::css() should be used instead.
  • Deprecated craft\web\View::registerCssFile(). CraftCms\Cms\View\HtmlStack::cssFile() should be used instead.
  • Deprecated craft\web\View::registerScript(). CraftCms\Cms\View\HtmlStack::script() should be used instead.
  • Deprecated craft\web\View::registerScriptWithVars(). CraftCms\Cms\View\HtmlStack::scriptWithVars() should be used instead.
  • Deprecated craft\web\View::registerHtml(). CraftCms\Cms\View\HtmlStack::html() should be used instead.
  • Deprecated craft\web\View::registerMetaTag(). CraftCms\Cms\View\HtmlStack::metaTag() should be used instead.
  • Deprecated craft\web\View::registerLinkTag(). CraftCms\Cms\View\HtmlStack::linkTag() should be used instead.
  • Deprecated craft\web\View::registerTranslations(). CraftCms\Cms\View\HtmlStack::translations() should be used instead.
  • Deprecated craft\web\View::registerJsImport(). CraftCms\Cms\View\HtmlStack::jsImport() should be used instead.
  • Deprecated craft\web\View::registerIcons(). CraftCms\Cms\View\HtmlStack::icons() should be used instead.
  • Deprecated craft\web\View::startJsBuffer(). CraftCms\Cms\View\HtmlStack::startJsBuffer() should be used instead.
  • Deprecated craft\web\View::clearJsBuffer(). CraftCms\Cms\View\HtmlStack::clearJsBuffer() should be used instead.
  • Deprecated craft\web\View::startScriptBuffer(). CraftCms\Cms\View\HtmlStack::startScriptBuffer() should be used instead.
  • Deprecated craft\web\View::clearScriptBuffer(). CraftCms\Cms\View\HtmlStack::clearScriptBuffer() should be used instead.
  • Deprecated craft\web\View::startCssBuffer(). CraftCms\Cms\View\HtmlStack::startCssBuffer() should be used instead.
  • Deprecated craft\web\View::clearCssBuffer(). CraftCms\Cms\View\HtmlStack::clearCssBuffer() should be used instead.
  • Deprecated craft\web\View::startCssFileBuffer(). CraftCms\Cms\View\HtmlStack::startCssFileBuffer() should be used instead.
  • Deprecated craft\web\View::clearCssFileBuffer(). CraftCms\Cms\View\HtmlStack::clearCssFileBuffer() should be used instead.
  • Deprecated craft\web\View::startJsFileBuffer(). CraftCms\Cms\View\HtmlStack::startJsFileBuffer() should be used instead.
  • Deprecated craft\web\View::clearJsFileBuffer(). CraftCms\Cms\View\HtmlStack::clearJsFileBuffer() should be used instead.
  • Deprecated craft\web\View::startHtmlBuffer(). CraftCms\Cms\View\HtmlStack::startHtmlBuffer() should be used instead.
  • Deprecated craft\web\View::clearHtmlBuffer(). CraftCms\Cms\View\HtmlStack::clearHtmlBuffer() should be used instead.
  • Deprecated craft\web\View::startMetaTagBuffer(). CraftCms\Cms\View\HtmlStack::startMetaTagBuffer() should be used instead.
  • Deprecated craft\web\View::clearMetaTagBuffer(). CraftCms\Cms\View\HtmlStack::clearMetaTagBuffer() should be used instead.
  • Deprecated craft\web\View::startJsImportBuffer(). CraftCms\Cms\View\HtmlStack::startJsImportBuffer() should be used instead.
  • Deprecated craft\web\View::clearJsImportBuffer(). CraftCms\Cms\View\HtmlStack::clearJsImportBuffer() should be used instead.
  • Deprecated craft\web\View::getNamespace(). CraftCms\Cms\View\InputNamespace::get() should be used instead.
  • Deprecated craft\web\View::setNamespace(). CraftCms\Cms\View\InputNamespace::set() should be used instead.
  • Deprecated craft\web\View::namespaceInputs(). CraftCms\Cms\View\InputNamespace::namespaceInputs() should be used instead.
  • Deprecated craft\web\View::namespaceInputName(). CraftCms\Cms\View\InputNamespace::namespaceInputName() should be used instead.
  • Deprecated craft\web\View::namespaceInputId(). CraftCms\Cms\View\InputNamespace::namespaceInputId() should be used instead.
  • Deprecated craft\web\View::TEMPLATE_MODE_CP. CraftCms\Cms\View\TemplateMode::Cp should be used instead.
  • Deprecated craft\web\View::TEMPLATE_MODE_SITE. CraftCms\Cms\View\TemplateMode::Site should be used instead.
  • Deprecated craft\web\View::getTemplateMode(). CraftCms\Cms\View\TemplateMode::get() should be used instead.
  • Deprecated craft\web\View::setTemplateMode(). CraftCms\Cms\View\TemplateMode::set() should be used instead.
  • Deprecated craft\web\View::getTemplatesPath(). CraftCms\Cms\View\TemplateMode::templatesPath() should be used instead.
  • Deprecated craft\web\View::getCpTemplateRoots(). CraftCms\Cms\View\TemplateMode::templateRoots() should be used instead.
  • Deprecated craft\web\View::getSiteTemplateRoots(). CraftCms\Cms\View\TemplateMode::templateRoots() should be used instead.
  • Deprecated craft\web\View::EVENT_REGISTER_CP_TEMPLATE_ROOTS. CraftCms\Cms\View\Events\CpTemplateRootsResolving should be used instead.
  • Deprecated craft\web\View::EVENT_REGISTER_SITE_TEMPLATE_ROOTS. CraftCms\Cms\View\Events\SiteTemplateRootsResolving should be used instead.
  • Deprecated craft\web\View::registerDeltaName(). CraftCms\Cms\View\DeltaRegistry::registerName() should be used instead.
  • Deprecated craft\web\View::getDeltaNames(). CraftCms\Cms\View\DeltaRegistry::getNames() should be used instead.
  • Deprecated craft\web\View::getModifiedDeltaNames(). CraftCms\Cms\View\DeltaRegistry::getModifiedNames() should be used instead.
  • Deprecated craft\web\View::setInitialDeltaValue(). CraftCms\Cms\View\DeltaRegistry::setInitialValue() should be used instead.
  • Deprecated craft\web\View::getInitialDeltaValues(). CraftCms\Cms\View\DeltaRegistry::getInitialValues() should be used instead.
  • Deprecated craft\web\View::getIsDeltaRegistrationActive(). CraftCms\Cms\View\DeltaRegistry::isActive() should be used instead.
  • Deprecated craft\web\View::setIsDeltaRegistrationActive(). CraftCms\Cms\View\DeltaRegistry::setActive() should be used instead.
  • Deprecated craft\web\View::hook(). CraftCms\Cms\View\TemplateHooks::register() should be used instead.
  • Deprecated craft\web\View::invokeHook(). CraftCms\Cms\View\TemplateHooks::invoke() should be used instead.
5.9.22
  • Fixed a bug where dependencies required by composer.json were getting updated when installing/updating plugins. (#18755)
  • Fixed a bug where element thumbnails weren’t always getting loaded when they became visible.
  • Fixed a bug where two-step verification setup was working even if the user failed to re-authenticate, if they already had an elevated session. (#18753)
  • Fixed a bug where changes to Table fields’ “Table Columns” settings would cause existing data to be lost, if the “Static Rows” setting was enabled. (#18764)
  • Fixed a moderate-severity authorization bypass vulnerability. (GHSA-7h62-6v23-v8fm)
4.17.15
  • Fixed a bug where dependencies required by composer.json were getting updated when installing/updating plugins. (#18755)
  • Fixed a moderate-severity authorization bypass vulnerability. (GHSA-7h62-6v23-v8fm)
5.9.21
  • Fixed a bug where entries weren’t redirecting back to their section’s page’s URL by default.
  • Fixed a bug where the resourceBasePath and resourceBaseUrl config settings weren’t being respected for console requests. (#18685)
  • Fixed a bug where eager-loadable GraphQL fields could be populated with the wrong field’s results, if they followed a fragment with a *Interface type condition. (#18708)
  • Fixed a bug where users with permission to edit entries, but not view peer entries in a section, weren’t allowed to edit the authors for entries in the section. (#18717)
  • Fixed a bug where reference tags weren’t working with generated fields. (#18692)
  • Fixed errors that could occur when applying project config changes. (#18720)
  • Fixed a bug where it wasn’t always possible to sign into a user account that had the same email address as an inactive user. (#18723)
  • Fixed a bug where relational fields’ element query results weren’t always limited to the selected relations if the id param was overridden. (#15570)
  • Fixed an error that could occur when executing a queue job. (#18739)
  • Fixed high-severity authorization bypass vulnerabilities. (GHSA-x5m4-g2cq-52pq, GHSA-3w32-23wj-rxg3, GHSA-qh45-9g5p-m2v4)
  • Fixed moderate-severity permission escalation vulnerabilities. (GHSA-qq2c-2q8j-jh27, GHSA-43cq-c2gq-pfpw)
4.17.14
  • Fixed high-severity authorization bypass vulnerabilities. (GHSA-3w32-23wj-rxg3, GHSA-qh45-9g5p-m2v4)
5.9.20
  • Fixed an issue that prevented Craft from being installed. (#18700)
  • Fixed a bug where nested element cards weren’t showing validation errors. (#18690)
  • Fixed a bug where read-only Matrix fields in Index mode weren’t respecting the Default Table Columns setting. (#18684)
  • Fixed a bug where nested entries could be lost when reverting content from a revision. (#18691)
  • Fixed a bug where nested entries weren’t getting loaded when previewing a revision, if queried with eagerly(). (#18693)
4.17.13.1
  • Fixed an issue that prevented Craft from being installed. (#18700)
5.9.19
  • Most classes can now be instantiated via the create() Twig function. (#18376)
  • Added craft\helpers\ProjectConfig::pathDepth().
  • craft\services\Fields::deleteLayout() and deleteLayoutById() now have $hardDelete arguments.
  • Deprecated craft\services\ProjectConfig::getPendingChangeSummary().
  • Fixed a bug where element search query caches weren’t getting invalidated when elements’ search keywords were indexed. (#18275)
  • Fixed a bug where disabled sites weren’t getting loaded when running Codeception tests. (#18638)
  • Fixed a bug where custom entry index page icons weren’t getting stored properly if the source name contained periods. (#18631)
  • Fixed a bug where copying nested entries on a revision wasn’t working. (#18648)
  • Fixed a bug where Matrix fields in Blocks view could have “Duplicate selected blocks” and “Delete selected blocks” field-level actions. (#18652)
  • Fixed a bug where the submit button within Live Preview was labelled “Save” rather than “Create entry” when editing an unpublished draft. (#18579)
  • Fixed a bug where recent changes could be lost when creating an element or applying a draft, if there were validation errors. (#18657)
  • Fixed a bug where nested elements would get soft-deleted after running the entrify/global-set command. (#18650)
  • Fixed a bug where the “Max Authors” section setting was visible for Single sections.
  • Fixed an exception that would be thrown when attempting to access undefined keys within craft\fields\data\JsonData objects from Twig. (#18656)
  • Fixed a bug where address cards could be missing their address preview. (#18632)
  • Fixed a bug where the Save button’s spinner wouldn’t appear right away when saving a nested element in a slideout. (#18664)
  • Fixed a bug where the server check script wasn’t treating GD as a requirement. (craftcms/server-check#30)
  • Fixed a bug where tooltips could be instantiated multiple times within Link fields. (#18666)
  • Fixed a bug where localized nested element content could be overwritten when the owner element was propagated to a new site. (#18659)
4.17.13
  • Most classes can now be instantiated via the create() Twig function. (#18376)
  • Fixed a bug where element search query caches weren’t getting invalidated when elements’ search keywords were indexed. (#18275)
5.9.18
  • Improved error logging when logging in with passkeys. (#18627)
  • Added craft\controllers\ElementIndexesController::$fieldLayouts.
  • craft\services\ElementSources::getTableAttributes() now has a $fieldLayouts argument.
  • Fixed a bug where GraphQL results were getting cached even if they contained transform generation URLs. (#18581)
  • Fixed a bug where aria-activedescendant, aria-flowto, and aria-owns attributes weren’t getting namespaced by {% namespace %} tags. (#18577)
  • Fixed a bug where sites with missing enabled values were being treated as enabled. (#18572)
  • Fixed a bug where GraphQL fields within fragments weren’t getting eager-loaded if the fragment’s type condition referenced an interface (e.g. on EntryInterface) rather than a specific type name. (#18588)
  • Fixed a bug where relation fields were getting marked as translatable if they used a custom translation method, even if the rendered translation key was blank. (#18580)
  • Fixed a bug where section and field chips in the “Used by” column of the Entry Types index page weren’t getting hyperlinked. (#18589)
  • Fixed a bug where exceptions thrown when sending emails weren’t getting handled properly. (#18597)
  • Fixed a bug where unordered lists weren’t getting styled correctly within Tip/Warning/Markdown field layout UI elements. (#18598)
  • Fixed an error that could occur when upgrading to Craft 5. (#18576)
  • Fixed a bug where nested Matrix entries’ Title fields were getting validation errors if blank, even if the nested entry was disabled. (#18611)
  • Fixed an infinite recursion bug that could occur if the loginPath, logoutPath, setPasswordPath, or verifyEmailPath config settings were set to a callable that called the sites service. (#18605)
  • Fixed a bug where Matrix fields in Index view mode could be missing custom field columns. (#18590)
  • Fixed a JavaScript error that could occur when opening a modal. (#18612)
  • Fixed a bug where element chips and cards weren’t getting refreshed when a provisional draft’s changes were discarded in a different tab.
  • Fixed a bug where element attributes weren’t always updating when content changes were made.
  • Fixed a bug where successive edits to nested elements were forgotten. (#18624)
  • Fixed a bug where nested elements weren’t getting duplicated when a new site was added to the owner element. (#18621)
  • Fixed a bug where nested entries were getting assigned new IDs if they were edited multiple times for the same owner element draft. (#18461)
  • Fixed a SQL error that could occur when editing an element draft that had upstream changes. (#18626)
  • Fixed a bug where custom sources’ labels weren’t being translated within the document title. (#18629)
  • Fixed moderate-severity information disclosure vulnerabilities. (GHSA-gj2p-p9m4-c8gw, GHSA-33m5-hqp9-97pw)
  • Fixed a moderate-severity RCE vulnerability. (GHSA-qrgm-p9w5-rrfw)
4.17.12
  • Fixed a bug where GraphQL results were getting cached even if they contained transform generation URLs. (#18581)
  • Fixed a bug where aria-activedescendant, aria-flowto, and aria-owns attributes weren’t getting namespaced by {% namespace %} tags. (#18577)
  • Fixed a moderate-severity information disclosure vulnerability. (GHSA-gj2p-p9m4-c8gw)
  • Fixed a moderate-severity RCE vulnerability. (GHSA-qrgm-p9w5-rrfw)
5.9.17
  • Added craft\helpers\DateTimeHelper::testTimeToSeconds().
  • Fixed an error that could occur after running the utils/fix-field-layout-uids command. (#18516)
  • Fixed a JavaScript error that could occur if any field layout elements were configured with unsupported widths. (#18552)
  • Fixed an error that could occur when user impersonation failed. (#18569)
  • Fixed a bug where deeply-nested elements could be deleted unexpectedly. (#18537)
  • Fixed a warning that was getting logged when using craft\filters\SiteFilterTrait.
  • Fixed a bug where prefixing entry queries’ authorGroup params with and or not operators wasn’t working properly. (#18551)
  • Fixed an error that could occur when running the gc command, if a Matrix field had been converted to an Addresses or Content Block field. (#18549)
  • Fixed a styling issue. (#18566)
  • Fixed a JavaScript error that could occur when Time fields’ Min/Max Time settings were set.
4.17.11
  • Fixed an error that could occur after running the utils/fix-field-layout-uids command. (#18516)
  • Fixed a JavaScript error that could occur if any field layout elements were configured with unsupported widths. (#18552)
  • Fixed an error that could occur when user impersonation failed. (#18569)
5.9.16
  • Updated @simplewebauthn/browser to 13.3.0. (#18545)
  • Updated web-auth/webauthn-lib to 5.2.4. (#18545)
  • Fixed an error that occurred when loading some control panel resources on environments with craft\web\AssetManager::$cacheSourcePaths disabled. (#18536)
  • Fixed a bug where craft\fields\data\LinkData::getUrl() was returning the URL suffix rather than an empty string, if the rendered base URL was an empty string.
4.17.10
  • Fixed an error that occurred when loading some control panel resources on environments with craft\web\AssetManager::$cacheSourcePaths disabled. (#18536)
5.9.15
  • Element edit pages once again redirect to their referral URL on save. (#18483)
  • Added craft\filters\IpRateLimitIdentity. (#18510)
  • Added craft\helpers\App::resourcePathByUri().
  • Removed thamtech/yii2-ratelimiter-advanced. (#18510)
  • Fixed a bug where global set GraphQL query caches weren’t getting invalidated when global sets were updated. (#18479)
  • Fixed a bug where users/suspend-user and users/unsuspend-user actions required that the logged-in user have control panel access. (#18485)
  • Fixed a bug where flipping an image within the Image Editor didn’t always work. (#18486)
  • Fixed a bug where SVG files missing their width and height attributes weren’t getting them set as expected.
  • Fixed an error that occurred if a template referenced a preloaded Single entry followed by a null coalescing operator. (#18503)
  • Fixed a bug where links within Redactor fields were getting target="_blank" added to them. (#18500)
  • Fixed an error that could occur when applying project config changes, or editing entries with an invalid entry type. (#18477, #18505)
  • Fixed a bug where Content Block fields’ nested values weren’t always getting set correctly via resave commands. (#18453)
  • Fixed a bug where addresses without labels weren’t getting chip labels. (#18481)
  • Fixed a JavaScript error that could occur on element edit pages.
  • Fixed a bug where cross-site validation errors weren’t preventing elements from getting saved. (#18292)
  • Fixed a bug where failure messages when pasting elements weren’t getting displayed properly.
  • Fixed a bug where craft\helpers\UrlHelper::cpReferralUrl() was returning the referrer URL even if it had the same URI as the current page. (#18483)
  • Fixed a bug where Matrix field’ grouped entry type menu labels weren’t translatable. (#18528)
  • Fixed moderate-severity SSRF vulnerabilities. (GHSA-3m9m-24vh-39wx, GHSA-95wr-3f2v-v2wh)
  • Fixed a moderate-severity authorization bypass vulnerability. (GHSA-jq2f-59pj-p3m3)
4.17.9
  • Added craft\filters\IpRateLimitIdentity. (#18510)
  • Added craft\helpers\App::resourcePathByUri().
  • Removed thamtech/yii2-ratelimiter-advanced. (#18510)
  • Fixed a bug where global set GraphQL query caches weren’t getting invalidated when global sets were updated. (#18479)
  • Fixed a bug where users/suspend-user and users/unsuspend-user actions required that the logged-in user have control panel access. (#18485)
  • Fixed a bug where flipping an image within the Image Editor didn’t always work. (#18486)
  • Fixed a bug where SVG files missing their width and height attributes weren’t getting them set as expected.
  • Fixed an error that occurred if a template referenced a preloaded Single entry followed by a null coalescing operator. (#18503)
  • Fixed a bug where links within Redactor fields were getting target="_blank" added to them. (#18500)
  • Fixed moderate-severity SSRF vulnerabilities. (GHSA-3m9m-24vh-39wx, GHSA-95wr-3f2v-v2wh)
5.9.14
  • The PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is no longer set by default for database connections. (#18474)
  • Added craft\elements\Entry::canMove().
  • Fixed a bug where element selector modals weren’t showing any results if they were limited to sources that only exist for a different site than the active one. (#18478)
  • Fixed low-severity information disclosure vulnerabilities. (GHSA-44px-qjjc-xrhq, GHSA-vgjg-248p-rfm2, GHSA-x76w-8c62-48mg)
  • Fixed a moderate-severity access control vulnerability. (GHSA-6mrr-q3pj-h53w)
  • Fixed moderate-severity information disclosure vulnerabilities. (GHSA-3pvf-vxrv-hh9c, GHSA-5pgf-h923-m958)
  • Fixed a moderate-severity RCE vulnerability. (GHSA-86vw-x4ww-x467)
  • Fixed a moderate-severity authorization bypass vulnerability. (GHSA-f582-6gf6-gx4g)
4.17.8
  • The PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is no longer set by default for database connections. (#18474)
  • Fixed low-severity information disclosure vulnerabilities. (GHSA-44px-qjjc-xrhq, GHSA-vgjg-248p-rfm2, GHSA-x76w-8c62-48mg)
  • Fixed a moderate-severity access control vulnerability. (GHSA-6mrr-q3pj-h53w)
  • Fixed moderate-severity information disclosure vulnerabilities. (GHSA-3pvf-vxrv-hh9c, GHSA-5pgf-h923-m958)
5.9.13
  • The control panel is now translated into Greek. (#18458)
  • The PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is now set to false by default for database connections.
  • Fixed a bug where searchindex and searchindexqueue rows weren’t being deleted when an element was deleted for a site. (#18394)
  • Fixed a bug where multi-select condition rules weren’t applying their “has a value” and “is empty” operators correctly. (#18470)
  • Fixed an unintended change in behavior where 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.
  • Fixed a bug where drafts within “My Drafts” widgets weren’t getting hyperlinked. (#18456)
  • Fixed a bug where nested entries were getting assigned new IDs if they were edited multiple times for the same owner element draft. (#18461)
  • Fixed a bug where the “New Tab” button within field layout designers could be positioned incorrectly. (#18450)
  • Fixed a high-severity RCE vulnerability. (GHSA-2fph-6v5w-89hh)
  • Fixed a low-severity path traversal vulnerability. (GHSA-472v-j2g4-g9h2)
4.17.7
  • The PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is now set to false by default for database connections.
  • Fixed a bug where searchindex and searchindexqueue rows weren’t being deleted when an element was deleted for a site. (#18394)
  • Fixed a bug where multi-select condition rules weren’t applying their “has a value” and “is empty” operators correctly. (#18470)
  • Fixed a low-severity path traversal vulnerability. (GHSA-472v-j2g4-g9h2)
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
testo/facade
headercat/phpstan-extension-ide-helper
yosymfony/parser-utils
innmind/black-box
babenkoivan/elastic-migrations
babenkoivan/elastic-adapter
sandermuller/package-boost-php
sandermuller/boost-core
depa/sulu-google-reviews-bundle
croct/plug-symfony
develia/commons
dmstr/symfony-system-resources-bundle
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
renatomarinho/laravel-page-speed
develia/geo-bundle
austinheap/laravel-database-encryption
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle