SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Wszystko o Tinkerze
(prawie)
Jacek Sawoszczuk
Tinker
Tinker = REPL
REPL
● read-eval-print loop
○ czyta input
○ wykonuje go
○ wyświetla wynik
REPL
php -a ?
Historia
● Tinker wylądował w Laravelu 4.0
○ pod spodem, w pętli uruchamiał eval()
● Laravel 4.1 przeszedł na Boris REPL
● Od Laravela 5.0, tinker używa PsySH
PsySH
● wbudowane komendy
● szeroka konfiguracja
● dokumentacja i narzędzia do refleksji
● podpowiadanie składni i zarządzanie historią
● … dużo więcej
PsySH
Instalacja
composer global require psy/psysh
PsySH
● CakePHP - cake console
● CiviCRM - cv cli
● CodeIgniter - craftsman console
● Composer - composer repl
● Drupal - drush php, drupal shell
● Emacs - psysh.el
● eZ Publish - ezsh
● Jupyter - Jupyter-PHP
● Laravel/Lumen - artisan tinker
● Magento - magerun console
● MediaWiki - php
maintenance/shell.php
● Pantheon CLI - terminus cli
console
● Phalcon - phalcon console
● PhpStorm/IntelliJ IDEA - Laravel
Tinker
● SilverStripe - sliver
● Symfony - PsyshBundle,
symfony-repl
● WordPress - wp-cli shell
● Yii 2 - yii shell
● Zend Framework 1 - zf1-psysh
● Zend Framework 2 -
PsyshModule
Debugowanie
Tinker
dd() / var_dump() / dump()
XDebug
DEMO
>_
Castery
● wbudowane castery z Tinkera
○ IlluminateDatabaseEloquentModel
○ IlluminateSupportCollection
○ IlluminateFoundationApplication
○ IlluminateSupportHtmlString
○ IlluminateSupportStringable
Wyjątki
● wtf
● wtf ??!
● throw-up
Magiczne Zmienne
● $_ - ostatni wynik
● $_e - ostatni wyjątek
● $__out - ostatnie wyjście
● $__file - ostatnia ścieżka do pliku
● $__line - ostatni numer linii
● $__dir - ostatni katalog
● $__class - ostatnia klasa
● $__method - ostatnia metoda
● $__function - ostatnia funkcja
● $__namespace - ostatni namespace
SUDO
dostęp do komponentów private / protected
Mierzenie wydajności
● timeit -n1000 User::orderBy('email')->get()->count()
● timeit -n1000 User::all()->sortBy('email')->count()
Konfiguracja
● Tinker - per projekt
○ php artisan vendor:publish --provider="LaravelTinkerTinkerServiceProvider"
● PsySH - konfiguracja globalna
○ ~/.config/psysh/config.php
● PsySH - konfiguracja w projekcie
○ .env -> PSYSH_CONFIG=tinker.config.php
Konfiguracja
● Aliasy
● Castery
● Komendy
● Matchery
● Helpery
● …
Bonus
● używanie `use` i `namespace`
● historia w ~/.config/psysh/psysh_history
● pomijanie historii
● przeszukiwanie historii
● nieinteraktywne komendy
● restartowanie tinkera
Use cases
● praca z eloquentem i kolekcjami
● praca z kwerendami SQL
● praca z datami przy pomocy carbona
● testowanie funkcjonalności PHPa albo Laravela
● praca z systemem plików
● debugowanie problemów na zdalnych środowiskach
● testowanie własnych endpointów
● testowanie zewnętrznych API
● generowanie uuid (`Str::uuid()` / ``uuidgen``)
● zapoznawanie się z nowym kodem
Use cases
● uruchamianie testów
○ albo przez wyjście do shella ``vendor/bin/phpunit --filter user``
○ albo własna komenda
● dispatchowanie eventów / jobów
● wysyłanie maili / notyfikacji
● wysyłanie notyfikacji i Mailables
● itp. …
Alternatywy - Tinkerwell
● https://tinkerwell.app/
● płatna aplikacja desktopowa (electron)
● wbudowana instancja laravela
● łączenie po SSH
● praca z projektem w Dockerze
● wyświetlanie danych w tabeli i eksport do CSV
● inspekcja kwerend SQL
● drivery do innych niż laravel aplikacji
○ https://github.com/tinkerwellapp/drivers/tree/master/src/Drivers
○ pozwalają “zbootstrapować” aplikację
○ dodają komendy specyficzne dla danego środowiska
○ Drupal / Magento / PrestaShop / Wordpress itp.
Alternatywy
● tinkerwell-web
○ https://web.tinkerwell.app/
● tinkerun
○ https://tinke.run/
● laravel-kit
○ https://github.com/tmdh/laravel-kit
● spatie/laravel-web-tinker
○ https://github.com/spatie/laravel-web-tinker
Alternatywy
● Wtyczki do IDE
○ PhpStorm
○ VSCode
Alternatywy
● Dump servers
○ Ray
■ https://myray.app
○ Laravel Dump Server
■ https://github.com/beyondcode/laravel-dump-server
Linki
● https://psysh.org/#docs
● https://p.softonsofa.com/tinker-like-a-boss-in-psysh/
Pytania?
Jacek Sawoszczuk

Contenu connexe

Tendances

Bezpieczna infrastruktura serwisu www w chmurze - WordPress
Bezpieczna infrastruktura serwisu www w chmurze - WordPressBezpieczna infrastruktura serwisu www w chmurze - WordPress
Bezpieczna infrastruktura serwisu www w chmurze - WordPressMichał Smereczyński
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
Net core (dawniej 5.0) – co to dla mnie. też dużo o open source
Net core (dawniej   5.0) – co to dla mnie. też dużo o open sourceNet core (dawniej   5.0) – co to dla mnie. też dużo o open source
Net core (dawniej 5.0) – co to dla mnie. też dużo o open sourceTomasz Kopacz
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Semihalf
 

Tendances (6)

Bezpieczna infrastruktura serwisu www w chmurze - WordPress
Bezpieczna infrastruktura serwisu www w chmurze - WordPressBezpieczna infrastruktura serwisu www w chmurze - WordPress
Bezpieczna infrastruktura serwisu www w chmurze - WordPress
 
NSOperation(Queue)
NSOperation(Queue) NSOperation(Queue)
NSOperation(Queue)
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Net core (dawniej 5.0) – co to dla mnie. też dużo o open source
Net core (dawniej   5.0) – co to dla mnie. też dużo o open sourceNet core (dawniej   5.0) – co to dla mnie. też dużo o open source
Net core (dawniej 5.0) – co to dla mnie. też dużo o open source
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).
 

Similaire à (prawie) Wszystko o Tinkerze

Elasticsearch nie tylko dla Wielkodanowców
Elasticsearch nie tylko dla WielkodanowcówElasticsearch nie tylko dla Wielkodanowców
Elasticsearch nie tylko dla WielkodanowcówŁukasz Kuczyński
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...HighSolutions Sp. z o.o.
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceLaravel Poland MeetUp
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Michalis Kamburelis
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHPLogicaltrust pl
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?Brainhub
 
SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013Adam Przybyła
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 

Similaire à (prawie) Wszystko o Tinkerze (14)

Elasticsearch nie tylko dla Wielkodanowców
Elasticsearch nie tylko dla WielkodanowcówElasticsearch nie tylko dla Wielkodanowców
Elasticsearch nie tylko dla Wielkodanowców
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open Source
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP
 
DTrace
DTraceDTrace
DTrace
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?
 
SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 

Plus de Laravel Poland MeetUp

WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...Laravel Poland MeetUp
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) Laravel Poland MeetUp
 
Kilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w EloquentKilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w EloquentLaravel Poland MeetUp
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Laravel Poland MeetUp
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Laravel Poland MeetUp
 
Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?Laravel Poland MeetUp
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravel Poland MeetUp
 
Przegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do LaravelaPrzegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do LaravelaLaravel Poland MeetUp
 
Laravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2ELaravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2ELaravel Poland MeetUp
 
Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?Laravel Poland MeetUp
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w LaravelWstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w LaravelLaravel Poland MeetUp
 
Laravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydachLaravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydachLaravel Poland MeetUp
 

Plus de Laravel Poland MeetUp (20)

WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
 
Kilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w EloquentKilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w Eloquent
 
Licencje otwartego oprogramowania
Licencje otwartego oprogramowaniaLicencje otwartego oprogramowania
Licencje otwartego oprogramowania
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
Jak przemycić Shape Up do Scruma?
Jak przemycić Shape Up do Scruma?Jak przemycić Shape Up do Scruma?
Jak przemycić Shape Up do Scruma?
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)
 
Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
 
Przegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do LaravelaPrzegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do Laravela
 
Walidacja w Laravelu
Walidacja w LaraveluWalidacja w Laravelu
Walidacja w Laravelu
 
Laravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2ELaravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2E
 
Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?
 
Laravel Jobs i PHP8
Laravel Jobs i PHP8Laravel Jobs i PHP8
Laravel Jobs i PHP8
 
Wszystko o Laravel Livewire
Wszystko o Laravel Livewire Wszystko o Laravel Livewire
Wszystko o Laravel Livewire
 
Laravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFamiLaravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFami
 
Action-based Laravel
Action-based LaravelAction-based Laravel
Action-based Laravel
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w LaravelWstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
 
Laravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydachLaravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydach
 

(prawie) Wszystko o Tinkerze

  • 4. REPL ● read-eval-print loop ○ czyta input ○ wykonuje go ○ wyświetla wynik
  • 6. Historia ● Tinker wylądował w Laravelu 4.0 ○ pod spodem, w pętli uruchamiał eval() ● Laravel 4.1 przeszedł na Boris REPL ● Od Laravela 5.0, tinker używa PsySH
  • 7. PsySH ● wbudowane komendy ● szeroka konfiguracja ● dokumentacja i narzędzia do refleksji ● podpowiadanie składni i zarządzanie historią ● … dużo więcej
  • 9. PsySH ● CakePHP - cake console ● CiviCRM - cv cli ● CodeIgniter - craftsman console ● Composer - composer repl ● Drupal - drush php, drupal shell ● Emacs - psysh.el ● eZ Publish - ezsh ● Jupyter - Jupyter-PHP ● Laravel/Lumen - artisan tinker ● Magento - magerun console ● MediaWiki - php maintenance/shell.php ● Pantheon CLI - terminus cli console ● Phalcon - phalcon console ● PhpStorm/IntelliJ IDEA - Laravel Tinker ● SilverStripe - sliver ● Symfony - PsyshBundle, symfony-repl ● WordPress - wp-cli shell ● Yii 2 - yii shell ● Zend Framework 1 - zf1-psysh ● Zend Framework 2 - PsyshModule
  • 12. Castery ● wbudowane castery z Tinkera ○ IlluminateDatabaseEloquentModel ○ IlluminateSupportCollection ○ IlluminateFoundationApplication ○ IlluminateSupportHtmlString ○ IlluminateSupportStringable
  • 13. Wyjątki ● wtf ● wtf ??! ● throw-up
  • 14. Magiczne Zmienne ● $_ - ostatni wynik ● $_e - ostatni wyjątek ● $__out - ostatnie wyjście ● $__file - ostatnia ścieżka do pliku ● $__line - ostatni numer linii ● $__dir - ostatni katalog ● $__class - ostatnia klasa ● $__method - ostatnia metoda ● $__function - ostatnia funkcja ● $__namespace - ostatni namespace
  • 15. SUDO dostęp do komponentów private / protected
  • 16. Mierzenie wydajności ● timeit -n1000 User::orderBy('email')->get()->count() ● timeit -n1000 User::all()->sortBy('email')->count()
  • 17. Konfiguracja ● Tinker - per projekt ○ php artisan vendor:publish --provider="LaravelTinkerTinkerServiceProvider" ● PsySH - konfiguracja globalna ○ ~/.config/psysh/config.php ● PsySH - konfiguracja w projekcie ○ .env -> PSYSH_CONFIG=tinker.config.php
  • 18. Konfiguracja ● Aliasy ● Castery ● Komendy ● Matchery ● Helpery ● …
  • 19. Bonus ● używanie `use` i `namespace` ● historia w ~/.config/psysh/psysh_history ● pomijanie historii ● przeszukiwanie historii ● nieinteraktywne komendy ● restartowanie tinkera
  • 20. Use cases ● praca z eloquentem i kolekcjami ● praca z kwerendami SQL ● praca z datami przy pomocy carbona ● testowanie funkcjonalności PHPa albo Laravela ● praca z systemem plików ● debugowanie problemów na zdalnych środowiskach ● testowanie własnych endpointów ● testowanie zewnętrznych API ● generowanie uuid (`Str::uuid()` / ``uuidgen``) ● zapoznawanie się z nowym kodem
  • 21. Use cases ● uruchamianie testów ○ albo przez wyjście do shella ``vendor/bin/phpunit --filter user`` ○ albo własna komenda ● dispatchowanie eventów / jobów ● wysyłanie maili / notyfikacji ● wysyłanie notyfikacji i Mailables ● itp. …
  • 22. Alternatywy - Tinkerwell ● https://tinkerwell.app/ ● płatna aplikacja desktopowa (electron) ● wbudowana instancja laravela ● łączenie po SSH ● praca z projektem w Dockerze ● wyświetlanie danych w tabeli i eksport do CSV ● inspekcja kwerend SQL ● drivery do innych niż laravel aplikacji ○ https://github.com/tinkerwellapp/drivers/tree/master/src/Drivers ○ pozwalają “zbootstrapować” aplikację ○ dodają komendy specyficzne dla danego środowiska ○ Drupal / Magento / PrestaShop / Wordpress itp.
  • 23. Alternatywy ● tinkerwell-web ○ https://web.tinkerwell.app/ ● tinkerun ○ https://tinke.run/ ● laravel-kit ○ https://github.com/tmdh/laravel-kit ● spatie/laravel-web-tinker ○ https://github.com/spatie/laravel-web-tinker
  • 24. Alternatywy ● Wtyczki do IDE ○ PhpStorm ○ VSCode
  • 25. Alternatywy ● Dump servers ○ Ray ■ https://myray.app ○ Laravel Dump Server ■ https://github.com/beyondcode/laravel-dump-server