- Upgrade from 3.0 to 3.1
- Upgrade from 2.0 to 3.0
- Upgrade from 1.3.* to 2.0
- Upgrade from 1.2.* to 1.3.0
- Upgrade from 1.2.0 to 1.2.3
- Upgrade from 1.1.* to 1.2.0
These notes cover the steps to follow in order to upgrade major versions of the framework.
The Themosis framework 3.1 is a minor upgrade and should normally not break existing 3.0 applications.
Release 3.1 finally brings a long-awaited feature: support for deprecations and warnings. This change stops converting WordPress user deprecations and warnings to PHP exceptions, which was causing an unpleasant experience while developing with the Themosis framework. From now on, warnings will be reported to a separate log file and no longer interrupt your development cycle while working in debug mode.
In order to upgrade to the Themosis framework 3.1, follow the steps below:
- Update the
themosis/frameworkdependency version inside the rootcomposer.jsonfile like so:"themosis/framework": "^3.1" - Update the
config/logging.phpof your application to the new configuration file. You want to make sure to add the new channel fordeprecations. - Finally run
composer updatefrom your terminal to upgrade your application.
See the changelog for more information.
The Themosis framework 3.0 shares a lot of 2.0 APIs. The main changes from this release is the support of PHP 8+ mainly.
Themosis framework 3.0 does not work on PHP 7.x versions
In order to support PHP 8+, the framework is now bundled with Laravel 8.x. Another notable change is also the removal of our console CLI script. It is now replaced by Laravel artisan CLI file instead. All previous Themosis commands are still available under artisan. To view a list of available commands, run the following command in your terminal:
php artisanHere is a list of a few things to change when upgrading to version 3.0:
- Salt keys are now set directly in your application
.envfile. On an existing application, make sure to copy the variables as found here in the.env.samplefile and then run thephp artisan salts:generatecommand from your terminal. Then update theconfig/wordpress.phpfile to retrieve salt keys values from the environment variables (example). - The HTTP kernel is now supporting the WebSocket and API routes. Add the
api.phpandchannels.phpfiles inside theroutesroot directory. The files can be empty PHP files, or you can copy the default ones provided by the framework. - Only PHP 8 and above is supported, so make sure to upgrade any custom code that is no longer supported in PHP 8+.
- Laravel 8 is now shipped with the framework. You might need to update some of your custom classes to support Laravel 8 APIs (version 2.0 of Themosis was using Laravel 5 in comparison).
- Rename the root
consolefile toartisanand replace its content with this one. - Configuration files have beeen updated. Compare your existing configuration files with the ones stored in our skeleton repository
- Update your
config/app.phpfile by adding the following service providers:BroadcastServiceProviderandEventServiceProviderin theprovidersproperty. - Update your
composer.jsondependencies, here is the default requirement and runcomposer updatefrom your terminal. Also makes sure to update thepost-autoload-dumpscript configuration to use the@php artisanscript instead of@php console.
Users that were or still use Laravel Homestead, the laravel/homestead package is no longer set as a default dependency. Laravel Homestead is still supported, just make sure to keep the dependency in your project and follow official documentation based on your installation preferences.
The framework ships a Laravel Valet local driver on new installation, feel free to add it to your project. Only WordPress single installation is supported with Valet. For a multisite installation, it is recommended to use Laravel Homestead.
The Themosis framework 2.0 is not a backward compatible release. It does share some API with previous releases but as its directory structure has changed, you need to move your code with extra care.
The recommended way of upgrading an existing application to a 2.0 release is to create a new 2.0 project and move parts one by one. Here are general steps to look after in order to upgrade your application:
- Create a new project:
composer create-project themosis/themosis your-app-name. - Update the root
.envfile based on your application needs - Move any custom WordPress constants you may have defined inside the old
config/environments/local-or-production.phpto the newconfig/wordpress.phpfile. - Create a new theme:
php console theme:install your-theme-name. - Move your old theme routes to the new application routes file:
routes/web.php. - Move your old controllers to the new application controllers directory:
app/Http/Controllers. Take care of changing the default namespace of your classes toApp\Http\Controllers. - If you have external dependencies, add them to the root
composer.jsonfile and update. Move specific business PHP classes, if any, inside theappdirectory and change their namespace accordingly. - Move your old theme views inside the new theme
viewsdirectory defined at theme's root. - Move your old theme
adminfiles into the new themeincfolder. - Move your old theme
configfiles into the new themeconfigfolder located at theme's root. - If you have widgets inside your old theme, move them inside the application
app/Widgetsdirectory and register them within theapp/Hooks/Widgets.phpfile. - In order to register your theme assets, you now have to call the
to()method on each instance. Thetomethod default to thefrontend side. - For theme translations, use the
THEME_TDconstant and update gettext files accordingly. - If you use the global front-end javascript object for your application and need to pass custom data through the filter, the filter name has changed to
themosis_front_global.
If you developed custom plugins on previous releases using the plugin boilerplate, those are no longer compatible with the 2.0 release. Plugin configuration has been simplified and is more straightforward. Just like the theme, it is best to start a new plugin and move parts one by one:
- Use the
php console plugin:install your-plugin-nameto start a new plugin
The plugin structure follows the same file organisation than the theme. Make sure to read the plugin guide for more information.
- The
mediaandcollectionfields only work with a metabox instance - PostType, Metabox, Page and Field API have changed their APIs and are more verbose. You no longer set properties by passing an array on a
setmethod. Please check the documentation for each API if you use them.
- The
infinitefield is no longer included within the framework for now
Follow the steps below if you're using version 1.2.x and want to upgrade to version 1.3.0. Version 1.3.0 has many code breaking changes, so take extra care to each step. We recommend you to upgrade your project using another branch and merge it once complete. For this update, you'll need to upgrade the root files, your custom theme root files and code and finally run a tiny database query in order to make your existing project work with the Themosis framework 1.3.0.
- Rename the
bootstrap/start.phpfile intobootstrap/autoload.php. - Replace the
bootstrap/autoload.phpfile content with this one. - Replace the
config/shared.phpcontent with this file. - Update your
config/environments/local.phpfile accordingly based on the new one. - Remove deprecated environments constants from all of your environments files (local, staging, production, ...):
THEMOSIS_ERROR_DISPLAYTHEMOSIS_ERROR_SHUTDOWNTHEMOSIS_ERROR_REPORT
- If you use any of these deprecated constants, be sure to update your project accordingly.
- Replace
htdocs/wp-config.phpfile with this one. - Replace
library/Thms/Config/Environment.phpclass content with this updated class. - Add a
twigsub-folder into thestoragedirectory. - Remove the
.phpextension to all of your.env.{location}files. - Update all
.env.{location}files content based on the DotEnv package syntax. Here is an example of the default.env.localfile to help you update your code. - Update the root
composer.jsonfile based on the framework new one and update yourrequirestatements based on your project needs. - Before running an update, verify that your current developed theme folder is not named
themosis-themeotherwise it will be overwritten. In some cases, you must also delete yourcomposer.lockandthemosis-frameworkfolder in order to get latest and overwrite cached versions. - Open your command line or console and update your composer installation by running first a
composer self-updatethen update your project dependencies by runningcomposer update. This will install all new framework dependencies.
If you have followed the previous steps, the framework core is up-to-date and a copy of the new themosis-theme has been installed as well into your themes directory for reference. The following steps will guide through the files to update, remove and move in order to make your custom theme compatible.
- Remove the
bootstrapfolder. - From the new
themosis-theme, copy itsfunctions.phpfile and replace your theme’sfunctions.phpfile. - Remove all the code from your theme
index.phpfile. Leaving the file empty. - Remove all theme
index.phpfiles placeholders except theindex.phpfile located at theme’s root. - Add a
languagesfolder in your theme root in order to load your translation files if any. - Move the
assetsfolder located inside theresourcesdirectory to your theme’s root. - At theme's root, create a
distfolder and addcss,imagesandjsfolders into it. - If you don't have one already, copy the
package.jsonfile from thethemosis-themeinto yours. - If you don't already use Gulp, copy the
gulpfile.jsfile from thethemosis-themeinto yours. - If you don't already have a
webpack.config.jsfile, copy thewebpack.config.jsfile from thethemosis-themeinto yours. - (optional) New theme is bundled with Gulp and Webpack to handle assets. If you have existing Gulpfile, Bower,… configuration files, it’s optional to update them but Gulp is configured to look for assets inside the
assetsfolder and compile them into thedistdirectory. - (optional) Move your previously compiled CSS files into the new
dist/cssdirectory. - (optional) Move your previously compiled JS files into the new
dist/jsdirectory. - Find and replace all references of the
themosis_assets()function with thethemosis_theme_assets()function. - Rename the
application.config.phpfile totheme.config.php. - Update the
theme.config.phpalias property with new one. Do not forget to add your custom aliases if previously defined. - Copy the
themosis-themeproviders.config.phpfile inside your theme’sresources/configdirectory. - Copy the
themosis-themeresources/providersdirectory and its content into your theme'sresourcesfolder. - Update the
loading.config.phpfile and replace all instances of the previous paththemosis_path(‘theme’)bythemosis_path(‘theme.resources’) - The new theme use a default PHP namespace,
Theme\\. Append the service providers auto-loading rule into yourloading.config.phpfile:'Theme\\Providers\\' => themosis_path('theme.resources').'providers'. - Update your models loading namespace key to
Theme\\Models\\. - Update your controllers loading namespace key to
Theme\\Controllers\\. - Update all your controllers and models classes to use the new theme namespace. For example on controllers classes:
namespace Theme\Controllers;. If you already use custom namespaces for your theme, keep it and update files accordingly. - (optional) If you already use custom namespace for your controllers, you have to update the
resources/providers/RoutingServicenamespace in order to correctly use your controllers within the routes. Find and replace the'Theme\Controllers'by your into the Route group method namespace property. - Inside your
resources/routes.phpfile, update your controller classes references to only their class name without the namespace. For example, if you had a class controller full name ofCompany\Awesome\Controller\Pages@show, such parameter would be nowPages@show. - The
BaseControllerclass is no longer bundled within the theme. Please define its path by adding the following use statement at the top of each of your controller classes:use Themosis\Route\BaseController;. - Find and replace all instances of the
THEMOSIS_TEXTDOMAINconstant byTHEME_TEXTDOMAINconstant. Make sure to check your config files as well. - The
Session::nonceNameandSession::nonceActionconstants have been removed. If you used them into your code, please define your own nonces. - The PostType
getSlug()method is deprecated. Update your code and use theget(‘name’)method. - The Form
checkboxes()method is deprecated. Update your code to use thecheckbox()method instead. - Rename all your view files to now use the
.blade.phpextension in place of the deprecated.scout.phpextension. - The directive
{{ }}prints and escapes values now and the{!! !!}directive only prints the value. Update your views accordingly to avoid HTML content being escaped like the post content for example. - For those using the Themosis page templates, the current version is now using WordPress core templates. Meaning that all the code referencing the meta key
_themosisPageTemplatemust be updated and reference the meta key_wp_page_template. Once your code updated, please refer to the last step below in order to update yourpostmetadatabase table.
For users who were working on the master branch, please update all references of
container('config')or$theme['config']bycontainer('config.factory')and$theme['config.factory']accordingly from your themefunctions.phpfile.
Since the framework now uses the WordPress core template system. You need to update your database postmeta table in order for your code to find the right page template. Open a MySQL console and run the following query (please change table name based on your database prefix):
UPDATE wp_postmeta SET meta_key = '_wp_page_template' WHERE meta_key = '_themosisPageTemplate';- Done! Congratulations.
Follow the steps below if you're using version 1.2.x and want to upgrade to version 1.2.3.
Note:
Habitually minor release doesn't need a manual process but this one is an exception in order to fix the PHP class alias issue. Since release 1.2.0, class aliases have been moved from the theme to the core plugin. The idea behind this was to provide core aliases to the theme but as well to custom plugins.
But we have an issue. Defining class aliases into plugin is prone to conflicts between plugins and the currently active theme. After testing some ideas to avoid name conflicts, it was clear that plugins won't be able to define class aliases or put in other words, won't be allowed to define class aliases using the PHP class_alias function. Developers will have to use PHP namespace and its features for the development of their plugins.
Please note that plugin development is still in its infancy with the framework. Plugin development with full documentation will be available for release 1.3.0. only.
In the meantime, update your project and follow the steps below to get version 1.2.3:
- Be sure your working theme has been renamed to something else than
themosis-theme. - Open the Console or Terminal and run
composer updatefrom your project root. - Replace your theme's
bootstrap/start.phpfile by this one. - Open your theme's
config/application.config.phpfile and update thealiasesproperty with the array list from this gist. - Upgrade complete.
Follow the steps below if you're using version 1.1.x and want to upgrade to version 1.2.0.
- Create a
storagefolder at project root (same location as your main composer.json file). - Inside the
storagefolder, create aviewsdirectory. - Update your
composer.jsonfile and set yourthemosis-frameworkandthemosis-themeversion to1.2.*. - Run
composer update. - Update the
start.phpfile located inside thebootstrapfolder at project root with this file. - Next, in your theme, replace
functions.phpfile by the one found in the new installed themosis-theme. - Rename your theme
appfolder toresources. - Copy the
bootstrapfolder from the new installed themosis-theme into your own theme. - Update your
loading.config.phpfile by the one found in the new installed themosis-theme. PSR-4 autoloading is used in this version. Update your custom classes autoloading statements accordingly. - Aliases defined inside
application.config.phpare now by default defined inside the core framework at least for core classes. You can override their aliases or add yours for your custom classes. If you don't have any custom aliases, you can specify an empty array by default. - The Field API has been rewritten. If you have
selectandeditorfields, check the new field documentation and update those fields as their arguments have been changed. - Delete the installed
themosis-theme. - Upgrade complete. Enjoy!
Check the change log page for a list of new features and fixes available. Also, the documentation has been completely rewritten for this release with more examples, make sure to check it out.
If you have an error with your views storage, your project is missing the constant
THEMOSIS_STORAGE. Please check step 5 above to fix this.