• Czas czytania ~3 min
  • 25.08.2022

Ten post pokaże Ci, jak dostosować skróty używane do generowania różnych klas w Twojej aplikacji. Chociaż jest to niewielka niedogodność, ręczne dostosowywanie każdej wygenerowanej klasy może być żmudne, a Laravel zapewnia programistom sposób na publikowanie i wersjonowanie stubów w aplikacji, jeśli chcesz dopasować wygenerowane klasy do swojego gustu.


Jeśli chcesz kontynuować, możesz utworzyć nowy projekt Laravel za pomocą instalatora Laravel , używając Sail lub w jakikolwiek inny sposób, w jaki wolisz utworzyć nową aplikację:

Być może zauważyłeś, że Instalator Laravela obsługuje teraz integrację Git i GitHubzakładając, że masz minimalną wymaganą wersję git, powinieneś mieć nowe repozytorium i pierwsze zatwierdzenie.

laravel new stub-demo --git

Wersjonowanie naszego projektu demo to doskonały sposób na wizualizację zmian, które twórz po drodze i zobacz, jakie pliki Laravel publikuje w aplikacji.

Publikowanie

Pierwszym krokiem w dostosowywaniu odcinków może być dodanie odcinków, które chcesz dostosować indywidualnie do folderu /stubs w katalogu głównym projektu Laravel, lub możesz opublikować je wszystkie za pomocą Artisan:</ p>

Jak widać, mamy sporo stubów opublikowanych w folderze app!Zostawię to Tobie, jeśli chcesz je wszystkie wersjonować, ale możesz zachować ich kopię lub zachować tylko te fragmenty, które chcesz dostosować.

$ php artisan stub:publish
$ git add stubs
$ git status
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
	new file:   stubs/cast.stub
	new file:   stubs/console.stub
	new file:   stubs/controller.api.stub
	new file:   stubs/controller.invokable.stub
	new file:   stubs/controller.model.api.stub
	new file:   stubs/controller.model.stub
	new file:   stubs/controller.nested.api.stub
	new file:   stubs/controller.nested.stub
	new file:   stubs/controller.plain.stub
	new file:   stubs/controller.stub
	new file:   stubs/factory.stub
	new file:   stubs/job.queued.stub
	new file:   stubs/job.stub
	new file:   stubs/middleware.stub
	new file:   stubs/migration.create.stub
	new file:   stubs/migration.stub
	new file:   stubs/migration.update.stub
	new file:   stubs/model.pivot.stub
	new file:   stubs/model.stub
	new file:   stubs/observer.plain.stub
	new file:   stubs/observer.stub
	new file:   stubs/policy.plain.stub
	new file:   stubs/policy.stub
	new file:   stubs/request.stub
	new file:   stubs/resource-collection.stub
	new file:   stubs/resource.stub
	new file:   stubs/rule.stub
	new file:   stubs/seeder.stub
	new file:   stubs/test.stub
	new file:   stubs/test.unit.stub

Niestandardowe skróty kontrolera

Laravel 8.36 wprowadził ideę --typeflaga podczas tworzenia kontrolera, umożliwiająca pisanie niestandardowych plików pośredniczących do generowania kontrolera:

Po dodaniu niestandardowej klasy pośredniczącej możesz wygenerować kontroler przy użyciu tego szablonu:

<?php
// stubs/controller.custom.stub
namespace {{ namespace }};
 
use {{ rootNamespace }}Http\Controllers\Controller;
use Illuminate\Http\Request;
 
/**
 * Hello from the custom controller stub
 */
class {{ class }}
{
    //
}

Który wygeneruje następujący plik kontrolera:

php artisan make:controller --type=custom MyController

Chociaż ten poziom elastyczności jest fajny, wierzę, że najbardziej programiści mogą zmieścić się w granicach odgałęzień dostarczonych przez framework.Użycie nowej flagi --type to ręczny sposób wyboru szablonu kontrolera, który chcesz wygenerować:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
/**
 * Hello from the custom controller stub
 */
class MyController
{
    //
}

Który wygeneruje plik na podstawie w pliku stubs/controller.plain.stub opublikowanym przez Laravela:

php artisan make:controller --type=plain PlainController

Rozsądne podejście

Załóżmy, że chcesz dołączyć komentarz dotyczący praw autorskich do każdego pliku wygenerowanego w Twojej aplikacji Laravel.W takim przypadku możesz rozważyć przechowywanie wersji wszystkich dostępnych kodów pośredniczących, a podczas aktualizacji uruchom polecenie stub:publish, aby uzyskać nowo dodane kody pośredniczące.

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
class PlainController extends Controller
{
    //
}

< p> Jednak w typowych przypadkach użycia możesz być może tylko wersjonować tylko te skróty, które musisz dostosować. Załóżmy na przykład, że nie chcesz, aby jakiekolwiek kontrolery rozszerzały podstawową klasę Controller; możesz wersjonować cały kontroler.* odcinki z Twoimi dostosowaniami, ale usuń wszystkie inne odcinki.

Co jeśli odcinki zmienią się w górę?

Powiedzmy, że tworzysz wersje wszystkich kodów pośredniczących z stub:publish, ale obawiasz się, że framework Laravel otrzymuje aktualizacje podstawowych plików pośredniczących, Twojej aplikacji będzie nieaktualny.Jeśli wersjonujesz wszystkie skróty, zawsze możesz wymusić aktualizację, aby uzyskać najnowsze wersje.

Weźmy to na przykład, zmodyfikujmy skrót i zatwierdźmy go w Git:< /p> Zaktualizowałeś kod testowy i zatwierdziłeś aktualizację do Git. Załóżmy, że później Laravel publikuje kilka aktualizacji dla stubów i chcesz sprawdzić, czy jakieś się zmieniły:

Masz łatwy sposób, aby zobaczyć, jak twoje stuby odeszły od bazy kodu Laravela z biegiem czasu! Ponieważ kody pośredniczące są wersjonowane, możesz po prostu cofnąć zmiany, flaga --force powoduje, że musisz scalić zmiany z najnowszymi zmianami pośredniczącymi.

echo "/* test */" >> stubs/test.stub
git commit -am"Testing stub update"
$ php artisan stub:publish --force
$ git diff
diff --git a/stubs/test.stub b/stubs/test.stub
index 834a53d..84c75cb 100644
--- a/stubs/test.stub
+++ b/stubs/test.stub
@@ -20,4 +20,3 @@ class {{ class }} extends TestCase
         $response->assertStatus(200);
     }
 }
-/* test */

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297