Rumah >pembangunan bahagian belakang >tutorial php >Pengesahan Data di Laravel: Cara yang betul - Pengesahan tersuai
3
Takeaways Key
Pakej Pengesahan Data yang dibina Laravel boleh diperluaskan untuk membuat peraturan pengesahan tersuai untuk keperluan khusus, seperti mengesahkan nama penuh atau kod pin yang termasuk ruang.
Kod sumber untuk tutorial ini boleh didapati di sini. Anda hanya perlu menjalankan pemasangan komposer untuk memasang rangka kerja Laravel di dalam direktori projek sebelum anda dapat menjalankan kod ini.
Keperluan untuk lebih banyakkeluar dari kotak, Laravel menyediakan banyak peraturan pengesahan yang berguna dan generik. Tetapi bagaimana jika kita mahukan lebih banyak? Bagaimana jika kita memerlukan sesuatu yang lebih spesifik? Dalam contoh kami di sini, dalam testFormValidator kami telah menggunakan alpha_dash untuk mengesahkan nama tetapi itu tidak sesuai untuk mengesahkan nama penuh. Umumnya, nama penuh seseorang akan terdiri daripada nama pertama dan nama terakhir dan mungkin nama tengah juga. Semua ini akan dipisahkan oleh ruang. Begitu juga jika kita mahu mengesahkan kod pin dalam bentuk kita, kita tidak boleh menggunakan peraturan alpha_num yang disediakan oleh Laravel, kita harus membenarkan ruang di dalamnya juga.
Nah, Laravel menyediakan pilihan untuk dengan mudah melanjutkan pakej pengesahannya dan menambah peraturan pengesahan tersuai kepadanya. Dalam RocketCandy/Services/Validation/Buat ValidatoreXtended.php dan tambahkan kod berikut kepadanya:
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
di sini kelas kami memanjangkan kelas IlluminateValidationValidator Laravel dan menambah dua kaedah baru (ValidatealPhadashSpaces () dan ValidateAlphanumspaces ()) untuk mengesahkan data dan mesej ralat masing -masing dengan pemegang tempat: atribut yang akan menggantikannya dengan nama yang mana medan data yang disahkan.
Sekarang perkara yang perlu diperhatikan di sini adalah bagaimana kita menamakan kaedah. Semua nama kaedah peraturan pengesahan mesti mempunyai awalan mengesahkan dan selebihnya mestilah dalam kes tajuk (tanpa ruang, tentu saja). Peraturan pengesahan akan berada dalam huruf kecil dari kaedah yang dinamakan (tanpa awalan pengesahan) dan setiap perkataan akan dipisahkan oleh garis bawah. Jadi jika kita mahu menambah peraturan pengesahan alpha_dash_spaces maka kaedah yang sepadan kita akan dinamakan validatealphadashspaces ().
jadi kami telah menambah alpha_dash_spaces dan alpha_num_spaces peraturan pengesahan di sini. Alpha_dash_spaces akan membolehkan huruf, sengkang (tanda hubung dan garis bawah) dan ruang manakala alpha_num_spaces hanya membenarkan huruf, nombor (nombor 0-9) dan ruang.
Kami belum selesai dengan ini, kelas ini hanya memanjangkan kelas pengesahan Laravel. Kami masih perlu membuat Laravel mengiktirafnya supaya apabila kami menambah peraturan baru kepada perkhidmatan Vaidation kami di atas, Laravel akan tahu bagaimana untuk menjalankan pengesahan seperti peraturan tersebut.
Dokumen Laravel menyatakan bahawa kita boleh melakukan ini:
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
dan melekatkannya dalam apl/start/global.php atau mungkin membuat fail baru di dalam direktori aplikasi dan memuatkan fail itu dalam apl/start/global.php. Tetapi itu tidak kelihatan begitu bersih, mengubahsuai fail yang kita tidak perlu mengubah suai, melekat bit dan kepingan di sana sini. Tidak, kami lebih suka menyimpan semua kod berkaitan pengesahan ini bersama -sama, jadi kami akan membuat pembekal perkhidmatan dan melekatkan peraturan pengesahan tersuai kami ke dalam pakej pengesahan Laravel di sana.
Buat ValidationExtensionServiceProvider.php di dalam RocketCandy/Services/Validation/dan tambahkan kod berikut kepadanya:
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Support\ServiceProvider</span>; </span></span><span> </span><span><span>class ValidationExtensionServiceProvider extends ServiceProvider { </span></span><span> </span><span> <span>public function register() {} </span></span><span> </span><span> <span>public function boot() { </span></span><span> <span>$this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span>return new ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> <span>} ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
Jika anda telah membuat pembekal perkhidmatan di Laravel sebelum biasanya anda menggunakan kaedah daftar () untuk melakukan apa sahaja yang mengikat yang anda perlukan. Ia adalah satu -satunya kaedah abstrak dalam kelas abstrak IlluminatesupportServiceProvider yang kami telah diperluaskan di sini. Sebabnya kami tidak dapat melekatkan pelanjutan pengesahan kami dalam daftar () adalah bahawa ia dipecat sebaik sahaja penyedia perkhidmatan dimuatkan oleh Laravel dan kami akan mengalami voli pengecualian yang dilemparkan kepada kami sebagai Laravel memulakan pakej pengesahannya kemudian, jadi kami akan cuba untuk memperluaskan perkara yang tidak ada menggunakan objek yang tidak wujud. Kaedah boot () di sisi lain dipecat sebelum permintaan dialihkan, jadi kami dapat dengan selamat melekatkan barang -barang kami ke pakej pengesahan Laravel di sana.
Sekarang kita hanya perlu memberitahu Laravel untuk memuatkan penyedia perkhidmatan ini dan kita akan ditetapkan. Buka apl/config/app.php anda dan dalam array penyedia Tambahkan yang berikut pada akhir:
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
Sekarang, buka aplikasi/rocketcandy/perkhidmatan/pengesahan/testFormValidator.php dan kemas kini harta peraturan $ supaya kelihatan seperti ini:
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
Kami menggantikan peraturan pengesahan alpha_dash untuk nama dengan alpha_dash_spaces dan alpha_num untuk pin_code dengan alpha_num_spaces.
Sekarang jika kita menavigasi ke http: //
Jadi dalam dua bahagian tutorial ini kita belajar:
Demi menjaga tutorial ini ke titik saya menyuntik perkhidmatan pengesahan dalam pengawal kami dan menggunakannya di sana. Dalam projek kehidupan sebenar, anda kemungkinan besar akan menggunakan perkhidmatan pengesahan di tempat lain di mana anda akan mengendalikan sanitisasi dan penyimpanan data. Sebaik -baiknya, pengawal harus bebas lemak dan mempunyai kod minimum yang minimum.
Ada pemikiran? Soalan? Api dalam komen.
Laravel adalah kerangka PHP yang popular yang menawarkan sistem yang mantap dan fleksibel untuk pengesahan data. Ia menyediakan pelbagai peraturan pengesahan yang boleh digunakan dengan mudah untuk data anda, memastikan ia memenuhi piawaian yang diperlukan sebelum diproses. Sistem pengesahan Laravel juga membolehkan peraturan pengesahan tersuai, memberikan anda keupayaan untuk menentukan kriteria anda sendiri untuk pengesahan data. Ini boleh menjadi sangat berguna apabila anda perlu mengesahkan data dengan cara yang tidak dilindungi oleh peraturan pengesahan terbina dalam Laravel. anda untuk membuat peraturan pengesahan tersuai menggunakan validator :: extend method. Kaedah ini mengambil dua parameter: nama peraturan pengesahan dan penutupan yang menerima tiga argumen - nama atribut, nilai atribut, dan panggilan balik kegagalan. Di dalam penutupan, anda boleh menentukan logik untuk peraturan pengesahan tersuai anda. Sekiranya pengesahan gagal, anda harus memanggil panggilan balik kegagalan dengan mesej ralat yang sesuai.
Laravel menjadikannya mudah untuk memaparkan mesej ralat pengesahan dalam pandangan anda. Apabila pengesahan gagal, Laravel mengalihkan pengguna kembali ke lokasi sebelumnya dengan semua kesilapan pengesahan yang disimpan dalam sesi. Anda kemudian boleh memaparkan kesilapan ini dalam pandangan anda menggunakan pembolehubah ralat $, yang secara automatik disediakan untuk semua pandangan oleh Laravel. Ya, Laravel membolehkan anda menyesuaikan mesej ralat untuk peraturan pengesahan tersuai anda. Ini boleh dilakukan dengan menentukan mesej tersuai anda dalam fail bahasa, dan kemudian merujuk mesej ini dalam logik pengesahan anda. Ini memberi anda fleksibiliti untuk menyesuaikan mesej ralat anda ke keperluan khusus aplikasi anda.
Bagaimana saya mengesahkan muat naik fail di Laravel? imej ',' mimes ', dan' saiz '. Peraturan ini membolehkan anda mengesahkan jenis dan saiz fail yang dimuat naik, memastikan bahawa ia memenuhi keperluan aplikasi anda. peraturan pengesahan tersuai dalam permintaan borang. Ini boleh dilakukan dengan menentukan peraturan dalam kaedah peraturan kelas permintaan borang. Anda kemudian boleh menggunakan peraturan ini apabila mengesahkan data permintaan borang.
Atas ialah kandungan terperinci Pengesahan Data di Laravel: Cara yang betul - Pengesahan tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!