Drupal Release: 8.0-alpha9
Pre Release
Tag Name: 8.0-alpha9
Release Date: 2/18/2014
DrupalHighly flexible, open-source content management system known for complex, scalable web applications. Preferred by government, educational, and large enterprise websites requiring advanced customization and security features. Robust module ecosystem.
TL;DR
Drupal 8.0-alpha9 brings significant architectural improvements and code cleanup as the project moves toward a more modern, object-oriented foundation. This release focuses on standardizing APIs, improving entity handling, replacing deprecated functions, converting theme functions to Twig templates, and enhancing developer experience through better documentation and code organization. Key changes include improved filter interfaces, entity reference handling, and the removal of deprecated Drupal 7 Ajax API. This alpha release continues Drupal 8's evolution toward a more maintainable, standardized codebase.
Highlight of the Release
- Conversion of many theme functions to Twig templates including item_list, links, form_element, and textarea
- Introduction of EntityOwnerInterface for better entity ownership handling
- Removal of deprecated Drupal 7 Ajax API
- Improved filter interfaces with methods moved to FilterFormatInterface
- Redesigned tabs and content header for better user experience
- Replacement of theme() with drupal_render() throughout the codebase
- Better entity reference field handling and integration
- Improved documentation and hook_help implementations for multiple modules
Migration Guide
Replacing Deprecated Functions
- Replace
theme()withdrupal_render()throughout your custom code - Replace
drupal_load()with proper class autoloading - Replace
module_invoke()with the appropriate service calls - Replace
module_exists()with service-based alternatives - Replace
drupal_json_encode()with\Drupal\Component\Utility\Json::encode() - Replace
check_plain()withDrupal\Component\Utility\String::checkPlain()
Entity API Changes
- Update code using
EntityInterface::uri()to useEntityInterface::urlInfo()instead - Change
$entity_typeparameters to$entity_type_idwhere they represent string IDs - Update code using
entityInfo()andentityType()methods to use the new method names - Implement
EntityOwnerInterfacefor entities that have owners - Use
getEntityTypeId()instead ofgetEntityType()on Query interface
Field API Changes
- Rename
FieldItemBase::getFieldSetting[s]()togetSetting[s]() - Update code using
field_attach_*_view()functions which have been removed
Theme System Changes
- Convert theme functions to use Twig templates
- Replace direct calls to
theme()withdrupal_render()or the new_theme()private API - Update custom themes to work with the new Twig templates for item lists, links, form elements, etc.
Service Container Changes
- Use
ConfigFactoryInterfaceto type hint ConfigFactory - Use constructor injection instead of setter injection where possible
- Use the new request_stack service for HTTP kernel related functionality
Upgrade Recommendations
This is an alpha release (8.0-alpha9) and is not recommended for production sites. It contains significant API changes and is intended for developers to test and provide feedback.
If you are a developer working with Drupal 8:
- Update your development environments to this alpha release to test your custom modules and themes
- Review the migration guide to update your code to work with the latest API changes
- Report any issues you encounter to the Drupal issue queue
If you are running a Drupal 7 site:
- Continue using Drupal 7 for production sites
- Consider setting up a development environment with Drupal 8 to begin learning the new APIs
- Note that direct upgrades from Drupal 7 to Drupal 8 are no longer supported (all 7.x to 8.x update hooks have been removed)
If you are already testing with a previous Drupal 8 alpha:
- Backup your site before upgrading
- Review the migration guide for API changes
- Test thoroughly after upgrading as many APIs have changed
Bug Fixes
Entity and Field Handling
- Fixed entity reference autocomplete widget handling of multiple values
- Fixed option widgets integration for entity reference fields
- Fixed 'language' extra field not displaying the language selected in node forms
- Fixed warning when adding content with an empty menu path
- Fixed inability to delete image styles from UI
- Fixed field with multiple select list not allowing -None- as default value
Views and Search
- Fixed bulk action views array to string conversion when no results
- Fixed search results page on PostgreSQL
- Fixed search ranking based on number of comments and page views
- Fixed Views integration for search module
UI and Display
- Fixed throbber misalignment in textfields when browser hardware acceleration enabled
- Fixed 'Back to site' button not preserving URL's language prefix and querystring
- Fixed toolbar subtree rendering
- Fixed toolbar toggle button click handling
- Fixed item-list.html.twig always showing empty text
- Fixed menu link administration for unpublished nodes
JavaScript and AJAX
- Fixed JavaScript file validation
- Fixed JavaScript file translations
- Fixed JsonResponse->callback returning data in an Insert Command without client support
- Fixed Drupal.formatString() not properly replacing all placeholders
Database and Performance
- Fixed PostgreSQL driver trying to implode primary key fields defined by array
- Fixed orderBy override in PostgreSQL driver for toolbar menu links
- Fixed exceptions on missing cache table during cache clear for PostgreSQL
- Fixed key_value_expire not getting reset causing PDO execution time ballooning
Security
- Protected WYSIWYG editors from XSS without destroying user data
Other
- Fixed aggregator failure when feed item contains empty description
- Fixed installer exception handling
- Fixed open_basedir support
New Features
Entity System Improvements
- Added
EntityOwnerInterfaceto standardize entity ownership handling - Introduced
@ConfigEntityTypeand@ContentEntityTypeannotations for better defaults - Added
Urlvalue object to replace string-based URL handling - Improved entity reference field handling and integration
- Renamed entity methods for better consistency (
entityInfo()toentityType(),uri()tourlInfo())
API Enhancements
- Added
\Drupal::hasService()method for checking service availability - Introduced
ConfigManagerto improve configuration management - Added request_stack service for the HTTP kernel
- Improved filter interfaces with methods moved to FilterFormatInterface
- Added constructor injection in HAL normalizer services
UI Improvements
- Redesigned tabs and content header for better user experience
- Updated search icon to SVG format
- Added CSS class to hide borders of fieldset elements
- Improved module descriptions on the extend page
- Fixed toolbar toggle button click handling
Twig Template Conversions
- Converted
theme_item_list()to Twig - Converted
theme_links()to Twig - Converted
theme_form_element()to Twig - Converted
theme_textarea()to Twig - Converted
theme_details()to Twig - Converted node module theme functions to Twig
Security Updates
WYSIWYG Editor Protection
- Protected WYSIWYG editors from XSS vulnerabilities without destroying user data (Issue #2099741)
Container Security
- Added protection against serializing the container, which could lead to security issues (Issue #2190643)
Error Handling
- Improved exception handling in the installer to use proper error/exception handlers
- Fixed ExceptionController to respect configured system.logging:error_level settings
Performance Improvements
Entity and Field Performance
- Optimized
entity_get_render_display()for multiple entity view scenarios - Optimized Config EntityQueries when conditions are on the 'id' field
- Avoided repeated cache tag deletions for better performance
Database and Caching
- Fixed key_value_expire not getting reset, which was causing PDO execution time to balloon for form pages
- Improved handling of cache clearing operations
Code Optimization
- Removed unnecessary drupal_load() calls which were being called pointlessly
- Removed getValue() / setValue() dance in WidgetBase::sortItems() for better performance
- Optimized system_rebuild_module_data() to avoid adding stale/obsolete 'files' property
Impact Summary
Drupal 8.0-alpha9 represents a significant step in Drupal 8's development with a focus on API standardization, code cleanup, and architectural improvements. This release impacts developers most heavily, requiring updates to custom code that uses deprecated functions or interfaces. The conversion of many theme functions to Twig templates means theme developers will need to adapt their custom themes accordingly.
The entity system has seen substantial improvements with better interfaces, standardized method names, and the introduction of the EntityOwnerInterface. The filter system has been enhanced with methods moved to FilterFormatInterface for better organization. The removal of the deprecated Drupal 7 Ajax API signals Drupal 8's continued move toward modern development practices.
Performance improvements include optimizations for entity rendering, config entity queries, and cache tag handling. Security has been enhanced with better protection for WYSIWYG editors against XSS vulnerabilities.
For site builders and administrators, UI improvements include redesigned tabs and content headers, better module descriptions, and improved help text. However, as an alpha release, this version is not recommended for production sites and is primarily intended for developers to test and provide feedback.
The removal of all 7.x to 8.x update hooks means that direct upgrades from Drupal 7 to Drupal 8 are no longer supported, signaling a clean break between major versions and emphasizing Drupal 8's architectural shift.
Statistics:
User Affected:
- Need to update code that uses deprecated functions like `drupal_load()`, `module_invoke()`, and `theme()`
- Must adapt to new entity interfaces and methods like `EntityInterface::urlInfo()` and `EntityOwnerInterface`
- Should update code to use new service interfaces and dependency injection patterns
- Need to use `drupal_render()` instead of `theme()` functions in many places
- Must update to new filter interfaces and methods
