Laravel shift pemecah masalah php cs

PHP-CS-Fixer adalah alat sumber terbuka yang dapat menegakkan, dan mendeteksi pelanggaran, gaya pengkodean PHP. Dengan aturan yang telah ditentukan sebelumnya, ini memungkinkan Anda memiliki gaya pengkodean ketat yang diberlakukan oleh alat sehingga Anda dapat meluangkan waktu untuk hal-hal yang lebih penting

Contoh aturan

Berikut adalah beberapa contoh hal-hal yang dapat dilakukan PHP-CS-Fixer ke basis kode Anda

Aturan. is_null

Mengganti ekspresi

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_9 dengan

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

0

// before...

if (is_null($account->closed_at)) {

//

}

 

// after...

if ($account->closed_at === null) {

//

}

Aturan. mb_str_functions

Ganti fungsi non-multibyte-safe dengan fungsi mb yang sesuai

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

Aturan. not_operator_with_successor_space

Operator NOT logis

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

1 harus memiliki satu spasi tambahan

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

_

Aturan main yang tersedia sangat lengkap dan selalu bertambah jumlahnya. Anda dapat melihat daftar lengkap aturan yang tersedia di readme proyek. Anda mungkin juga ingin memeriksa konfigurasi PHP-CS-Fixer, yang merupakan situs yang memberikan contoh tentang apa yang dilakukan setiap aturan, jika deskripsinya tidak jelas

Tip panas. Selain memperbaiki gaya, sering kali dapat digunakan sebagai alat pemutakhiran. PHPUnit 8 menambahkan tipe pengembalian

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

_2 ke beberapa metode. Menjalankan aturan

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

3 PHP-CS-Fixer pada direktori

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

4 dapat langsung memutakhirkan suite pengujian Anda, membuatnya kompatibel dengan perubahan ini

Bagikan aturan Anda

Saya menggunakan PHP-CS-Fixer di seluruh proyek saya dan memiliki seperangkat aturan yang menentukan gaya. Sampai sekarang, saya telah menyalin dan menempelkan aturan saya ketika saya memulai proyek baru, dan ketika aturan baru keluar, saya kemudian harus memperbarui konfigurasi saya di proyek saya yang sudah ada. Ini bukan alur kerja yang ideal karena Anda dapat dengan mudah lupa untuk memperbarui proyek tertentu, dan ini adalah sekumpulan pekerjaan manual

Ternyata adalah mungkin untuk membagikan aturan Anda di beberapa proyek dan tim sehingga

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

5 akan memiliki semua proyek Anda menggunakan versi terbaru dari kumpulan aturan Anda pada waktu tertentu

Scaffolding repo

Kami akan membangun repo git untuk menampung set aturan berbagi kami. Untuk memulai, kami akan menginisialisasi repo git lokal dan membuat file yang diperlukan

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

Menentukan aturan Anda

Seperti yang telah saya sebutkan sebelumnya, ada seperangkat aturan yang ekstensif, dan rilis baru terkadang berisi aturan baru, jadi menurut saya sangat berguna untuk melacak rilis PHP-CS-Fixer mana yang terakhir Anda tinjau aturan yang tersedia. Ini berarti ketika Anda mengupgrade ke versi yang lebih baru, Anda akan mengetahui rilis untuk mencari aturan baru yang mungkin ingin Anda masukkan ke dalam kumpulan aturan bersama Anda. Saya suka menambahkan rilis ulasan terakhir tepat di bagian atas file

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

6

<?php

 

// last reviewed: v2.16.3 Yellow Bird

Selanjutnya, kami ingin membuat file

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

6 kami mengembalikan array yang berisi kumpulan aturan kami. Menyimpan aturan dalam file terpisah sangat berguna karena daftarnya bisa sangat panjang, tergantung pada spesifikasi Anda. Ini juga memungkinkan pengembang lain untuk menarik kumpulan aturan Anda dan menggabungkannya dengan milik mereka sendiri, misalnya, jika Anda ingin menarik standar pengkodean Laravel dan menggabungkannya dengan beberapa standar tambahan tim Anda

<?php

 

// last reviewed: v2.16.3 Yellow Bird

 

return [

'@PSR2' => true,

'array_syntax' => ['syntax' => 'short'],

'final_class' => false,

'new_with_braces' => true,

// ...

];

PHP-CS-Fixer hadir dengan beberapa set aturan yang telah ditentukan sebelumnya. Semua aturan yang terkait dengan standar PSR-2 semuanya digabungkan ke dalam kumpulan aturan

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

8. Hal ini memungkinkan kami untuk ikut serta dalam standar tanpa harus menentukan setiap aturan satu per satu

Beberapa aturan memiliki opsi yang terkait dengannya. Aturan

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

9 memungkinkan Anda untuk menentukan apakah Anda ingin sintaks array pendek atau panjang

Aturan lain ditentukan dalam daftar dengan menggunakan namanya dan nilai boolean, seperti yang terlihat pada aturan

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

0. Meskipun Anda dapat menghilangkan boolean, saya ingin memasukkannya untuk konsistensi, jadi setiap item dalam larik adalah pasangan

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

1, jadi saya tahu saya telah menyisih dari aturan tertentu secara eksplisit

Metode pembantu

Untuk membuat penggunaan aturan bersama Anda tidak menyakitkan di seluruh proyek Anda, kami akan membuat fungsi pembantu. Mungkin tidak masuk akal mengapa ini ada dulu, tapi ikuti terus, dan semuanya akan menyatu

Untuk memastikan fungsi tidak bertentangan dengan fungsi global lainnya dalam proyek Anda atau dependensinya, sebaiknya letakkan fungsi tersebut di namespace. Buka file

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

_2 dan tentukan ruang nama yang masuk akal untuk konteks Anda

<?php

 

namespace TiMacDonald;

Sekarang kita perlu mendefinisikan tanda tangan metode. Metode ini akan menerima turunan dari

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

_3 dan juga serangkaian aturan yang akan memungkinkan proyek mengidentifikasi aturan tambahan yang diberlakukan berdasarkan proyek per proyek. Biasanya, saya akan mengatakan bahwa kami menginginkan konsistensi dan tidak boleh mengizinkan setiap proyek mengubah kumpulan aturan bersama – tetapi saya di sini bukan untuk memberi tahu Anda apa yang harus dilakukan, jadi kami akan membiarkan Anda melakukannya, tetapi Anda selalu dapat menghapusnya

<?php

 

namespace TiMacDonald;

 

use PhpCsFixer\Config;

use PhpCsFixer\Finder;

 

function styles(Finder $finder, array $rules = []): Config {

//

}

Luar biasa. Itu datang bersama dengan baik. Hal terakhir sekarang adalah mengisi isi fungsi helper

<?php

 

namespace TiMacDonald;

 

use PhpCsFixer\Config;

use PhpCsFixer\Finder;

 

function styles(Finder $finder, array $rules = []): Config {

$rules = array_merge(require __DIR__.'/rules.php', $rules);

 

return Config::create()

->setFinder($finder)

->setRiskyAllowed(true)

->setRules($rules);

}

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

_4 adalah bagaimana PHP-CS-Fixer akan mengetahui di mana mencari file PHP yang ingin Anda perbaiki. Kami menunda keputusan ini untuk proyek, karena masing-masing mungkin memiliki struktur direktori yang berbeda, mis. g. , proyek Laravel dibandingkan dengan paket Laravel

Aturan berisiko

Di dalam tubuh fungsi

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

5 Anda dapat melihat kami memberi tahu konfigurasi untuk mengizinkan aturan "berisiko" dengan panggilan ke

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

6. Anda harus membaca dokumentasi dan memahami bagaimana aturan berisiko dapat memengaruhi proyek Anda. Sebagai contoh, kita akan melihat aturan

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

7. Jika Anda membaca dokumentasi PHP di

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

8 Anda akan mencatatnya

implode() dapat, karena alasan historis, menerima parameternya dalam urutan apa pun. Untuk konsistensi dengan meledak(), bagaimanapun, tidak digunakan lagi untuk tidak menggunakan urutan argumen yang terdokumentasi

Ini berarti bahwa kedua panggilan implode ini akan memiliki hasil yang sama

<?php

 

implode($array, ',');

 

implode(',', $array);

Aturan

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

_7 akan mengatur ulang argumen menjadi urutan yang terdokumentasi, tetapi jika proyek Anda telah mendefinisikan ulang perilaku

<?php

 

// last reviewed: v2.16.3 Yellow Bird

0 untuk mengharapkan parameter dalam urutan yang salah, dengan beberapa cara seperti runkit, mengubah urutannya dapat merusak kode Anda

Jadi harap baca apa yang dilakukan setiap aturan berisiko dan pahami cara kerjanya sebelum Anda menambahkannya ke kumpulan aturan Anda

komposer. json

Untuk menarik paket ke dalam proyek kami, kami perlu mengisi file

<?php

 

// last reviewed: v2.16.3 Yellow Bird

1 kami. Saya merekomendasikan menjalankan pemeriksaan gaya dalam Continuous Integration (C. I. ), jadi saya akan menyertakan PHP-CS-Fixer secara lokal (Anda juga dapat mengunduh PHP-CS-Fixer sebagai file Phar jika Anda memiliki konflik paket)

Buka file

<?php

 

// last reviewed: v2.16.3 Yellow Bird

_1 dan pastikan untuk menetapkan

<?php

 

// last reviewed: v2.16.3 Yellow Bird

3 unik yang masuk akal bagi Anda

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

0

Mendorong ke penyedia

Langkah terakhir dalam menyiapkan repositori kami adalah mendorongnya ke solusi git yang dihosting. Buat repositori di penyedia pilihan Anda dan tambahkan sebagai asal ke repo lokal Anda. Saya akan menggunakan GitHub

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_1

Kami sekarang memiliki paket aturan bersama yang tersedia di GitHub. Selamat

Mengkonsumsi aturan bersama Anda

Sekarang kami sedikit mengganti persneling untuk fokus pada bagaimana Anda dapat menggunakan aturan bersama baru Anda di proyek lain. Tutup repo aturan bersama Anda dan buka proyek tempat Anda ingin menggunakannya. Ada beberapa penyiapan awal, tetapi setelah Anda melakukannya, hanya

// before...

- if (!$user->is_active) {

//

}

 

// after...

if (! $user->is_active) {

//

}

5 yang Anda perlukan

Memerlukan repositori Anda

Composer memungkinkan kita untuk meminta repositori dari platform Git yang dihosting, tanpa harus mengirimkannya ke Packagist. Mengingat repo semacam ini kemungkinan besar bersifat internal, tidak banyak keuntungan yang didapat dengan menambahkannya ke Packagist

Untuk mewujudkannya, tambahkan nama paket Anda secara manual ke proyek

<?php

 

// last reviewed: v2.16.3 Yellow Bird

5 blok. Saya tidak perlu mengunci gaya saya ke versi tertentu, jadi saya hanya menggunakan

<?php

 

// last reviewed: v2.16.3 Yellow Bird

6 yang berarti gaya terbaru akan selalu ditarik. Namun, Anda dapat membuat versi gaya Anda – tetapi itu terserah Anda

Karena kami tidak akan mengirimkan ke Packagist, kami harus memberi tahu Composer di mana menemukan paket tersebut. Kami melakukannya dengan menggunakan blok

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_2

Sekarang kami memberi tahu Komposer untuk meminta paket kami sebagai ketergantungan

<?php

 

// last reviewed: v2.16.3 Yellow Bird

7

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_3

Setup konfigurasi PHP-CS-Fixer Finder

Agar PHP-CS-Fixer mengetahui file apa yang ingin Anda targetkan, Anda perlu menentukan setiap direktori atau file dengan instance

$ mkdir php-styles

 

$ cd php-styles

 

$ git init

 

$ echo "/composer.lock

/vendor

/.php_cs.cache" >> .gitignore

 

$ mkdir src

 

$ touch src/rules.php src/helpers.php composer.json

3. Ini adalah versi turunan dari

<?php

 

// last reviewed: v2.16.3 Yellow Bird

_9, jadi untuk dokumentasi lengkap tentang semua batasan yang dapat Anda gunakan, lihat dokumen

Sebagai contoh kita, saya akan berpura-pura berada dalam aplikasi Laravel dan menyiapkan pencari saya untuk menelusuri direktori yang saya tahu ingin mematuhi konvensi gaya saya

PHP-CS-Fixer mengharapkan konfigurasi Anda berada dalam file

<?php

 

// last reviewed: v2.16.3 Yellow Bird

 

return [

'@PSR2' => true,

'array_syntax' => ['syntax' => 'short'],

'final_class' => false,

'new_with_braces' => true,

// ...

];

0, jadi kami akan membuatnya

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_4

Buka file ini dan tambahkan setup finder berikut untuk aplikasi Laravel Anda. Anda juga dapat menyertakan folder lain yang ingin Anda perbaiki, tetapi ini berfungsi sebagai default yang masuk akal

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

5

Kami sekarang siap untuk meneruskan pencari kami ke fungsi pembantu yang kami buat beberapa menit yang lalu. PHP-CS-Fixer mengharapkan file ini mengembalikan instance

<?php

 

// last reviewed: v2.16.3 Yellow Bird

 

return [

'@PSR2' => true,

'array_syntax' => ['syntax' => 'short'],

'final_class' => false,

'new_with_braces' => true,

// ...

];

1, yang persis seperti yang dikembalikan oleh fungsi pembantu kami

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_6

Sekarang posisikan diri Anda pada posisi penjepit sementara kami secara otomatis memperbaiki gaya pengkodean kami di semua direktori ini. Lompat ke terminal dan jalankan perintah berikut untuk menyaksikan keajaiban terjadi…

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_7

Berjalan di CI

Sebaiknya terapkan aturan gaya Anda selama C. I. Anda dapat melakukan ini dalam beberapa cara. Anda bisa melakukan "dry run", yang akan gagal jika mendeteksi pelanggaran gaya kode

// before...

$length = strlen($request->post('slug'));

 

// after...

$length = mb_strlen($request->post('slug'));

_8

Atau, Anda bisa memiliki C. I. jalankan pemecah masalah dan komit otomatis perubahan ke repo Anda. Jika Anda menggunakan tindakan GitHub, lihat artikel hebat ini yang ditulis oleh Stefan Zweifel tentang bagaimana Anda mengimplementasikannya

Bungkus

Terima kasih telah datang dalam perjalanan ini. PHP-CS-Fixer adalah alat yang hebat, dan mudah-mudahan, jika Anda menjalankan beberapa proyek yang berbagi gaya pengkodean standar, pendekatan ini mungkin berguna

Diajukan

Berita

timacdonald

Mengembangkan aplikasi web yang menarik dan berkinerja dengan fokus pada TDD. Mengkhususkan diri dalam proyek PHP / Laravel. ❤️ membangun untuk web