UX/UI Improvements
- Added a beautiful error log viewer in the backend that displays contextual information about exceptions, links directly to the source files, and unrolling of all previous exceptions in the stack.
- Added new
buttonfield type to make it easier to add custom buttons to backend forms. - Added support for the
urlfield type to the backend forms. - Added email icon to
emailfields. - Updated the default backend branding colours to match the Winter CMS Brand Guidelines.
- Added support for shift clicking to select multiple records at once in the Lists widget.
- Removed the sort icon from columns that aren't sortable and display a right arrow when a column is sortable but isn't currently being used to sort the results.
- Added
button-groupanddropdownfilter scope types. - Made the entire
mediafinderfield clickable whenmode: file. - Improve click behaviour of
recordfinderfields when disabled. - Allow users to zoom the backend on mobile.
- Added support for
abort(403)to return the access denied view in the backend - Improved handling of
abort(404)in the backend - Improved styling of disabled fields in the fancy form layout
- Hide the select all checkbox on the Lists widget when there are no records to select.
- Fixed anchor tag outline styling in Firefox.
- Style read-only columns on Table widget with slightly darker grey background to indicate read-only state.
- Allow tab and arrow navigation for read-only columns on the Table widget.
- Allowed searching option to show search box on the Table widget even if adding and deleting buttons are disabled.
- Fixed styling of toolbar on the Table widget if only the search box is shown (no background previously).
- Fixed styling of pagination on Table widget.
- Default to
ignoreTimezone = truefor date columns.
DX Improvements
- Added default views for the following backend controller behaviors (FormController, ImportExportController, ListController, ReorderController)
- Backend controllers will now automatically set their navigation context in the form of
Author.Pluginas the author,$pluginNameas the main menu code, and$controllerNameas the side menu code. This means that you can remove calls toBackendMenu::setContext()and constructor overrides in your controllers if they follow that convention. - Improved styling of file generated / updated status message in scaffolding commands
- Added support for
ReactJSin Vite & Mix compiled asset packages. - Added support for customizing the Vite build directory.
- Improved support for Model Factories.
- Added
testalias for thewinter:testcommand. - Added
schedule_timezoneproperty toconfig/app.php. - Updated theme scaffold's README.md to reflect the use of Vite in the generated themes.
- Added
Mail::sendTo()method to the Mail facade's docblock. - Added support for modules to the
asset:createcommands (mix:create,vite:create). - Make readOnly option case-insensitive on the Table widget.
- Improvements to the default scaffolding stub files to bring more inline with the future PSR-12 coding style update.
API Changes
- Added typehints to all the method signatures on the base
Winter\Storm\Database\Attach\Filemodel. (eg.getPath(),getCacheKey(),getFilename(),getContents(),getDiskPath(),isPublic(), etc). - Added
metadatajsonable column to the base File model, migrations have been added forsystem_files, but if you use a custom files table you will need to add a migration that adds$table->mediumText('metadata')->nullable();to your files table. - Made
getDiskName()on the baseWinter\Storm\Database\Attach\Filemodel public. - Added support for an array of names to use for the
postbackHandlerNamein the Table widget. - Removed the
config:cachecommand as it wasn't improving our performance and didn't fully work with Winter's flexible configuration system. - Added support for
SystemExceptionandApplicationExceptioninstances to define their own response codes. - Added
appendViewPath()andprependViewPath()to theSystem\Traits\ViewMaker.addViewPathis renamed toprependViewPath()and is for paths that have higher priority than the existing paths whileappendViewPath()is for paths that should have lower priority than the existing paths (i.e. fallbacks). - Behaviors extending
Backend\Classes\ControllerBehaviorwill now automatically append theirviewsfolder to the controller's view paths allowing them to provide fallbacks for any views required by the behavior. - The
create:controllercommand will now no longer generate the views by default unless--stubsis also passed and the--sidebarflag is replaced with a--layout=(standard|sidebar|fancy)option to choose the form layout to use. - Support for passing
new: trueas a parameter in the request body toonSave()calls that will return a redirect to thecreateaction formMakePartial(string $partial, array $params = [])to theFormControllerbehavior that will render a partial through the controller'smakePartialusing the following priority list of contextual names (form_$context_$partial,form_$partial,$partial).- Added
PromptsForMissingInputto the baseWinter\Storm\Console\Commandclass. - Removed the unused (and broken)
Winter\Storm\Database\DataFeedclass. PluginTestCasenow resets the application router in thesetUp()method between test runs to ensure that plugin routes load in the correct order during tests.
Bug Fixes
- Removed redundant backend route.
- Fixed issues where TagList & Repeater FormWidgets were not able to save an empty value.
- Fixed issue where TagList could return an object in array mode.
- Fixed using Vite packages when they are explicitly ignored / excluded from the project's
package.json. - Improved support for
winter:mirroron Windows - Using the
{% flash %}tag in Twig will now properly purge the FlashBag after it has been read. - Improved support for plugins attempting to access the database before it's fully ready to go.
- Fixed suport for hex colors with alpha values.
- Fixed infinite loop that occurrs when the configured database exists but the tables don't exist yet.
- Fixed support for array callables as dynamic methods.
- Event listeners bound to events with
bindEventOnce()now properly unbind after execution, even if the event is a halting event. - Fixed Syntax Error in CAST Statement for Postgres attachment.
- Fixed CMS Maintenance Mode not working when the
allowed_ipssetting has a value but a null list of IPs. - Fixed CMS Maintenance Mode settings page not showing the correct value for when the Maintenance Mode is enabled.
- Improved support for using hasManyThrough / hasOneThrough relationships with soft deletes.
- Fixed support for the
--forceflag inwinter:env. - Improved support for defining multiple Vite entrypoints.
- Prevent crashes when rendering invalid values in datepicker fields.
- Prevent editors from being created for all column types in the Table widget if read-only (previously, only string columns would be rendered read-only by setting the readonly attribute, this is not ideal because it can be easily changed).
- Fixed broken search if client datasource is used on the Table widget.
- Fixed addVite() method not being able to bind assets to the parent controller.
- Fixed displaying the status of maintenance mode triggered through the backend.
- Fixed backend-triggered maintenance mode support for defined but empty IP lists.
- Fixed support for hex colors with alpha values in the
colorpickerFormWidget. - Improved handling of registering / booting plugins when migrations haven't been run yet.
Security Improvements
- Added AllowList functionality to the Twig security policy.
Translation Improvements
- Improved Russian translations.
- Improved Dutch translations.
Performance Improvements
- Switched to a number input instead of a select dropdown for direct navigation to list pages in the Lists widget. Drastically improves performance when a list has 100+ pages in the results as it no longer causes an N+1 performance issue of rendering a single option element for every single page in your results.
- Fixed an infinite loop that could occur when a database was present but plugin migrations hadn't been run yet.
Community Improvements
- Added Laravel to the list of organizational sponsors.
- Removed Route4Me from the list of organizational sponsors.
Dependencies
- Added support for PHP 8.4
- Dropped support for PHP 8.0, PHP 8.1 is now the minimum requirement.
- wikimedia/less has been bumped to v5 from v3.
- Minimum Laravel version has been bumped to
v9.49.
New Contributors
- @goldmont made their first contribution in #1268
- @thienvu18 made their first contribution in #1294
- @truechernyshov made their first contribution in #1272
- @IsaiahPaget made their first contribution in #1361
- @Satoshi-Sh made their first contribution in #1369
Full Changelog: v1.2.7...v1.2.8