Skip to content

Uppgradering

På den här sidan finns guider för att uppgradera temat till nya Dusk versioner.

Dusk 2.x

Tack vare WordPress 6.4 behövs en uppgradering till senaste Dusk, vilket är 2.x.

I och med Dusk 2 gjordes några större ändringar som göra att det behövs lite arbete för att kunna uppgradera i ett tema som tidigare körde 1.x.

Om sidan redan använde Dusk 2 (detta kan bekräftas med wp dusk about) behövs bara första steget i listan nedan.

INFO

Olika sidor har utvecklats på olika sätt, så det kan behövas lite mer arbete utöver det som beskrivs nedan.

För att uppgradera till Dusk 2.x gör man följande steg:

  • Pinna och uppgradera nobox/dusk till ^2.0
  • Modifiera ThemeServiceProvider
  • Ta bort config/ filer
  • Modifiera composer.json
  • Fixa bootloader anropet
  • Lägg till saknade type declarations

Om du uppgraderar från dev-main innan Dusk 1.x bör du även göra följande steg från rubriken "Temat innan Dusk 1.0"

  • Ta bort nobox/acf-composer
  • Byt ut samtliga Log1x\Acf\* och Log1x\AcfComposer\* referenser

Pinna och uppgradera nobox/dusk till ^2.0

Öppna composer.json och ändra versionen på nobox/dusk till ^2.0.

TIP

Om du ser ex. symfony/deprecration-contracts och andra liknande dependencies behöver du uppgradera dem också.

Ändra följande dependencies till dessa versioner.

json
{
  "symfony/deprecation-contracts": "^3.0",
  "symfony/event-dispatcher": "^6.0",
  "symfony/event-dispatcher-contracts": "^3.0",
  "symfony/string": "^6.0",
  "symfony/translation": "^6.0",
  "symfony/translation-contracts": "^3.0"
}

Alternativ kan du prova att ta bort dessa dependencies från temats composer.json då de inte direkt behövs.

Kör följande kommando för att starta uppgraderingen:

shell
> composer upgrade -W

Lägg till nobox/horizon-directives

Blade direktiven togs bort från Dusk och gjordes till sitt egna paket. Du installerar det på följande vis:

shell
> composer require nobox/horizon-directives

Används WooCommerce? Komplettera med nobox/horizon-woocommerce

Är det en sida som använder WooCommerce/Woo så behöver du även komplettera med horizon-woocommerce för att allt ska fungera som det är tänkt:

shell
> composer require nobox/horizon-woocommerce

Modifiera ThemeServiceProvider

I filen app/Providers/ThemeServiceProvider.php gör man följande ändring:

php
namespace App\Providers;

use Illuminate\Support\ServiceProvider; 
use Nobox\Dusk\Horizon\HorizonServiceProvider; 

class ThemeServiceProvider extends ServiceProvider
class ThemeServiceProvider extends HorizonServiceProvider
{

Om du uppgraderar från dev-main, gör istället följande ändring:

php
namespace App\Providers;

use Nobox\Dusk\ServiceProvider; 
use Nobox\Dusk\Horizon\HorizonServiceProvider; 

class ThemeServiceProvider extends ServiceProvider
class ThemeServiceProvider extends HorizonServiceProvider
{

Ta bort config/ filer

Dusk 2 stödjer "zero-config", vilket i vårt fall betyder att man bara behöver configs för det man vill göra annorlunda, standard configerna ligger inuti Dusk.

Detta betyder att de flesta filer i config mappen är oväsentliga och kan i vissa fall ställa till med problem.

Du kan ta bort samtliga filer som du inte gjort ändringar i. Har du gjort ändringar i filer kan du antingen låta dem vara kvar eller ta bort det som du inte ändrat på.

Beroende på hur nytt temat var innan du uppdaterade ska du behålla theme.php, sizes.php och blocks.php om de finns.

Modifiera composer.json

I composer.json behöver du lägga till följande block:

json
"extra": {
  "dusk": {
    "providers": [
      "App\\Providers\\ThemeServiceProvider"
    ],
    "dont-discover": []
  }
},

Fixa bootloader anropet

Dusks bootloader kräver numera att man gör ett anrop till boot metoden.

Beroende på vilken version du uppgraderar från kan anropet finnas i olika filer. De flesta sidor hittar anropet i functions.php, men sidor som byggdes med en väldigt tidig version av Horizon hittar anropet i bootstrap/app.php.

Gå in i filen som motsvarar din version och gör följande ändring:

php
\Nobox\bootloader(); 
\Nobox\bootloader()->boot(); 

Lägg till saknade type declarations

I och med vissa kodändringar i Dusk kommer du behöva lägga till ex. void returtypen på metoder i specifika klasser.

Exempel på detta är enqueue metoden i ACF Block samt register och boot metoderna i ThemeServiceProvider.

TIP

I dessa enklare fall kan du även ta bort PHPDoc som inkluderar @return. Om du har beskrivit vad en metod gör behöver du inte ta bort den.

php
class ThemeServiceProvider extends HorizonServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register() 
    public function register(): void
    {
        parent::register();
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot() 
    public function boot(): void
    {
        parent::boot();
    }
}

TIP

För att underlätta detta är det bra att passa på att installera Laravel Pint ifall det inte redan är installerat.

Vi använder Pint för att formattera din kod efter vår kodstandard, vilket då också kommer fixa ovanstående automatiskt.

Installera Pint med följande kommandot och lägg denna pint.json config i temamappen:

shell
> composer require laravel/pint:1.5

Lägg till följande stycke i scripts inuti composer.json (skapa "scripts": {} om den inte finns):

json
"fmt": [
  "pint"
],

Kör sedan composer fmt för att formattera din kod med Pint.

Temat innan Dusk 1.0

Medan temat var under mycket utveckling var versionen för nobox/dusk satt till dev-main för att enkelt kunna få tillgång till ny funktionalitet och fixar.

Innan Dusk uppgraderades till Laravel 9 skapades versionen 1.0 (och senare 1.1). Detta betyder att temat inte kan göra en composer updatenobox/dusk utan att introducera en hel del kompatibilitetsproblem.

För att lösa detta kan man uppgradera och pinna Dusk till version 1.0 (eller 1.1), som har kvar stödet för Laravel 8.

För att uppgradera till Dusk 1.x gör man följande steg:

  • Pinna nobox/dusk till 1.0.0
  • Byt ut ServiceProvider
  • Ta bort nobox/acf-composer
  • Lägg till AcfComposerServiceProvider i config/app.php
  • Byt ut samtliga Log1x\Acf\* och Log1x\AcfComposer\* referenser

Pinna nobox/dusk till 1.0.0

Ifall temat använder dev-main som version är det en bra idé att pinna versionen till 1.0.0.

shell
> composer require nobox/dusk:1.0.0

Alternativt kan man pinna till ^1.0 för att få t.ex. 1.1.0.

shell
> composer require nobox/dusk:^1.0

Byt ut ServiceProvider

Klassen Nobox\Dusk\ServiceProvider togs bort eftersom den inte gjorde något mer än Laravels grundklass.

I filen app/Providers/ThemeServiceProvider.php gör man följande ändring:

php
namespace App\Providers;

use Nobox\Dusk\ServiceProvider; 
use Illuminate\Support\ServiceProvider; 

class ThemeServiceProvider extends ServiceProvider

Ta bort nobox/acf-composer

Dusk innehåller en egen version av ACF Composer, så den här dependency:n behövs inte längre.

Ta bort den genom att köra följande i temamappen:

shell
> composer remove nobox/acf-composer

Lägg till AcfComposerServiceProvider i config/app.php

För att använda ACF Composer från Dusk behöver man registrera Dusks AcfComposerServiceProvider klass.

Gör följande ändring i filen config/app.php:

php
Illuminate\View\ViewServiceProvider::class,

/*
 * Package Service Providers...
 */
Nobox\Dusk\Acf\Providers\AcfComposerServiceProvider::class, 
// Nobox\Dusk\Horizon\Compatibility\BuddyBossServiceProvider::class,
// Nobox\Dusk\Horizon\Compatibility\BuddyPressServiceProvider::class,
// Nobox\Dusk\Horizon\Compatibility\BbPressServiceProvider::class,
// Nobox\Dusk\Horizon\Compatibility\WooCommerceServiceProvider::class,

/*
 * Application Service Providers...
 */
App\Providers\ThemeServiceProvider::class,

Byt ut samtliga Log1x\Acf\* och Log1x\AcfComposer\* referenser

Eftersom vi använder Dusks ACF Composer behöver vi ändra klassreferenser i samtliga ACF-relaterade filer som finns i temat.

Istället för Log1x\Acf\* används istället Nobox\Dusk\Acf\*. Exempelvis ändras Log1x\Acf\Field till Nobox\Dusk\Acf\Field.

Istället för Log1x\AcfComposer\* används istället Nobox\Dusk\Acf\*. Exempelvis ändras Log1x\AcfComposer\Block till Nobox\Dusk\Acf\Block.

I filen app/Options/Settings.php gör man följande ändring:

php
namespace App\Options;

use Log1x\Acf\Options as Field; 
use Nobox\Dusk\Acf\Options as Field; 
use StoutLogic\AcfBuilder\FieldsBuilder;

class Settings extends Field

Gör liknande ändringar i samtliga ACF filer i temat.