Ardent: Model Laravel pada steroid
3
Salah satu daripada (beberapa) perkara yang saya tidak suka tentang Laravel adalah bahawa anda tidak boleh memindahkan kod pengesahan dari pengawal anda ke model anda dengan mudah. Apabila saya menulis perisian, saya suka menggunakan prinsip "Model Lemak, Skinny Controllers". Oleh itu, bagi saya, menulis kod pengesahan dalam pengawal bukanlah perkara yang baik.
seperti yang anda boleh bayangkan, ia adalah lanjutan dari kelas model yang fasih, pada dasarnya. Pakej ini dilengkapi dengan beberapa fungsi baru, utiliti dan kaedah yang didedikasikan untuk pengesahan input dan perkara -perkara kecil yang lain.
Takeaways Key
Pengesahan yang dipertingkatkan: Ardent memudahkan proses pengesahan dengan membenarkan peraturan ditakrifkan secara langsung dalam model, meningkatkan organisasi kod dan pemeliharaan, terutama dalam projek yang lebih besar.
Model auto-hidrat: Ciri ini secara automatik mengisi atribut model dari input borang, mengurangkan kod boilerplate dalam pengawal dan membuat pembersih codebase dan lebih efisien.
cangkuk model: Ardent memperkenalkan cangkuk model yang merupakan kaedah yang dilaksanakan pada momen kitaran hayat tertentu, seperti sebelum dan selepas menyimpan, mengemas kini, atau memadam, memberikan kawalan yang lebih besar ke atas pengendalian data.
Hubungan yang dipermudahkan: Menentukan hubungan model lebih diselaraskan dengan bersemangat, menggunakan struktur array mudah (`$ RelationsData`), yang mengurangkan kerumitan pengurusan hubungan dalam model Laravel.- data pembersihan auto yang berlebihan: Ardent secara automatik boleh membuang data yang tidak perlu dari input, seperti medan pengesahan atau token CSRF, memastikan bahawa hanya data yang relevan diproses dan disimpan.
- Aplikasi Ujian kami
- Untuk pemahaman yang lebih baik tentang kelebihan yang boleh anda nikmati semasa menggunakan Ardent, kami akan menyediakan aplikasi ujian kecil. Tidak ada yang rumit: aplikasi senarai tugasan yang mudah.
- Sudah tentu, saya tidak akan melaksanakan aplikasi lengkap: Saya hanya ingin menerangkan beberapa prinsip, jadi saya akan membuat beberapa pengawal dan model - tiada pandangan. Selepas itu, saya akan "menterjemahkan" kod menggunakan Ardent.
- senarai tugasan kami akan mengira dua entiti yang berbeza:
Pengguna
id
first_name
- last_name
- kata laluan
-
- tugas
- id
- Nama
status (dilakukan / tidak dilakukan) -
- Projek yang sangat asas. Walau bagaimanapun, jika anda tidak mahu menulis kod, jangan risau: Saya telah menyediakan penghijrahan yang boleh anda gunakan untuk menghasilkan pangkalan data. Gunakannya!
- Dan kemudian, isi fail dengan kod ini:
php artisan migrate:make todo_setup
Salin selepas log masukSalin selepas log masukSalin selepas log masukSekarang kita mempunyai jadual kita. Sudah tiba masanya untuk mencipta model kami. Malah di sini kita mempunyai sedikit baris untuk menulis. Inilah model pengguna (yang juga lalai).
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSaya hanya menambah kaedah tugas untuk menggambarkan hubungan dengan model tugas.
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukKami hanya membuat titik permulaan kami. Mulai sekarang, selepas pemasangan, kami akan melihat dua situasi yang berbeza: pertama, versi "normal" kod tanpa bersemangat. Selepas itu, kami akan membuat perbandingan dengan versi "bertambah baik". Anda akan melihat perbezaannya, percayalah.
mari kita mulakan!
Memasang Ardent
Memasang Ardent sangat mudah dengan komposer. Cukup tambahkan kebergantungan kepada fail komposer.json projek anda.
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukKemudian, selepas kemas kini, anda hanya perlu melanjutkan kelas yang bersemangat dalam model anda seperti:
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masuk... dan anda sudah bersedia untuk pergi!
Pengesahan data
Perkara pertama yang perlu dilakukan ialah menganalisis bagaimana Ardent menjadikan kehidupan kita lebih mudah dalam melaksanakan pengesahan. Kami sudah tahu bagaimana untuk melakukannya dengan Laravel. Mari buat contoh klasik: kaedah pos yang akan mengendalikan data yang datang dari borang.
Dalam situasi "normal" kita akan membuat sesuatu seperti ini:
<span><span><?php </span></span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> { </span></span><span> <span>// model code here! </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masuk... bagaimana dengan bersemangat?
Dengan bersemangat, perkara berubah sedikit. Pertama sekali, seperti yang anda boleh bayangkan dengan mudah, peraturan pengesahan akan dipindahkan terus ke dalam model: di sini kita akan memulakan "restyle" kita. Oleh itu, buka fail model dan ubahnya seperti:
<span><span><?php </span></span><span> </span><span> <span>public function postSignup() </span></span><span> <span>{ </span></span><span> <span>$rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>$messages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages); </span></span><span> </span><span> <span>if($validator->fails()) </span></span><span> <span>{ </span></span><span> <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages()); </span></span><span> <span>} </span></span><span> </span><span> <span>$user = new User; </span></span><span> </span><span> <span>$user->first_name = Input<span>::</span>get('first_name'); </span></span><span> <span>$user->last_name = Input<span>::</span>get('last_name'); </span></span><span> <span>$user->email = Input<span>::</span>get('email'); </span></span><span> <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password')); </span></span><span> </span><span> <span>if($user->save()) </span></span><span> <span>{ </span></span><span> <span>$status = 1; </span></span><span> <span>} </span></span><span> <span>else </span></span><span> <span>{ </span></span><span> <span>$status = 0; </span></span><span> <span>} </span></span><span> </span><span> <span>return Redirect<span>::</span>to('user/signup')->with('status', $status); </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukapa yang berlaku? Tidak banyak: Kami menukar kelas asas model kami (dari fasih hingga bersemangat) dan kami berpindah (menggunakan sintaks yang sama, hanya satu salinan) peraturan pengesahan di sini, dengan mesej ralat tersuai.
Jadi, persoalannya sekarang ialah: Apa yang akan kita tulis dalam pengawal kami?
mari kita periksa:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>public static $rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>public static $customMessages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukTiada arahan pengesahan di sini. Mereka semua hilang. Ia bukan sekadar "bergerak", bagaimanapun: kaedah $ user-> simpan (), sekarang, akan kembali palsu jika terdapat beberapa masalah dalam fasa pengesahan. Kemudian, anda akan dapat mengambil kesilapan dengan kaedah $ user-> ralat ()-> semua (). Tiada Kelas Aneh: Objek yang dikembalikan akan menjadi beg mesej klasik yang mungkin anda temui semasa bekerja dengan Laravel.
Jika anda lebih suka, bagaimanapun, anda juga boleh menggunakan $ user-> ValidationErrors Property. Dalam kes itu, atau jika anda ingin mengambil kesilapan khusus medan hanya gunakan $ user-> validationErrors-> get ('field_name'). Mari kita mulakan dengan yang paling penting: organisasi kod yang lebih baik bermaksud pemeliharaan projek yang lebih baik. Dalam aplikasi mudah, anda tidak boleh merasakannya sebagai keutamaan, tetapi apabila ia datang kepada projek -projek yang lebih besar, perkara -perkara boleh mudah merosakkan dengan satu keputusan yang salah. Biarkan saya membuat contoh keadaan dunia sebenar. Kami membangunkan aplikasi senarai tugas yang hebat, dan ia berkembang dengan cepat. Kami pasti memerlukan API yang tenang untuk aplikasi mudah alih. Menggunakan pengawal dalam cara "normal" bermakna menulis rutin pendaftaran lain untuk API. Dua blok berbeza dengan kod yang sama! Ini tidak baik. Di manakah prinsip lama kering (jangan ulangi diri anda)?
Jadi, amalan terbaik akan menulis kaedah pendaftaran () dalam model yang mengendalikan segala -galanya. Menggunakan Ardent bermaksud mengendalikan segala -galanya: dari pengesahan ke prosedur simpan. Tanpa itu, kita tidak dapat mencapai fasa pertama.
Kelebihan kedua adalah yang lebih praktikal: model auto-hidrat. Mari kita temukan bersama.
Model auto-hydrate
Kaedah pos kami () mengira tepatnya tiga belas baris kod. Walaupun ia kelihatan sukar, Ardent dapat menurunkan jumlah itu lagi. Lihat contoh ini:
php artisan migrate:make todo_setup
Salin selepas log masukSalin selepas log masukSalin selepas log masukTiada kesilapan di sini. Anda mungkin sudah memahami apa yang berlaku.
Ardent mempunyai ciri model auto-hidrat model. Ini bermakna apabila anda membuat objek dan panggil kaedah $ user-> simpan (), setiap bidang diisi secara automatik dengan data objek input. Sudah tentu, anda perlu memberikan nama yang betul di setiap bidang borang dengan sewajarnya.
Jadi, kod ini:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukakan mempunyai kesan yang sama seperti
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukdari tiga baris kami hanya turun hingga tujuh untuk prosedur pendaftaran keseluruhan.
Untuk menggunakan ciri ini, anda perlu mengaktifkannya. Hanya menukar $ autohydrateentityFrominput dalam model anda untuk benar, seperti ini:
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukselesai!
anda juga akan sering mempunyai beberapa data berlebihan yang anda tidak perlukan untuk logik perniagaan. Fikirkan tentang bidang _confirmation atau token CSRF. Nah, kita boleh membuangnya dengan harta $ AutopurgeredundantTributes model. Seperti dahulu, hanya beralih ke benar.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masuksekarang prosedurnya lebih bersih daripada sebelumnya.
cangkuk model
Satu lagi ciri yang baik yang patut disebut ialah pengenalan cangkuk model. Mereka pada dasarnya, senarai kaedah yang, jika dilaksanakan, dipanggil dalam momen pelaksanaan tertentu. Oleh itu, untuk membuat contoh, kaedah afterupdate () akan dipanggil sebelum setiap kemas kini () panggilan. Kaedah beforevalidate () akan dipanggil sebelum setiap pengesahan, dan sebagainya.
Berikut adalah senarai semua kaedah ini:
- beforecreate ()
- afterCreate ()
- beforesave ()
- aftersave ()
- sebelum ini ()
- afterUpdate ()
- beforedelete ()
- afterDelete ()
- beforevalidate ()
- afterValidate ()
Contoh klasik boleh menjadi beberapa penghuraian data sebelum prosedur simpan. Seperti ini:
php artisan migrate:make todo_setup
Salin selepas log masukSalin selepas log masukSalin selepas log masukSetiap kaedah "sebelum" mempunyai nilai pulangan Boolean. Jika benar, operasi berikut dilaksanakan secara normal. Sekiranya kaedah itu kembali palsu, operasi akan dihentikan. Dalam kaedah di atas, kami menjana slug (dan mengisi medan yang betul) dengan kaedah beforesave (), selepas pengesahan.
Terdapat juga tip khusus mengenai Beforesave () dan aftersave (): anda boleh mengisytiharkannya pada masa yang berlalu. Lihat:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukmari kita fikirkan beberapa kemungkinan penggunaan kaedah ini dalam aplikasi kami.
mungkin beforesave () untuk menangani hashing kata laluan?
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukatau cangkuk pembersihan tepat sebelum pengguna memadam prosedur?
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukTerdapat banyak kemungkinan.
Menentukan hubungan (cara yang bersemangat)
dengan bersemangat, anda juga boleh menentukan hubungan dengan cara yang lebih pendek daripada sebelumnya. Mari kita lihat bagaimana kita sebenarnya menentukan hubungan kita antara model: Contoh berikut menunjukkan kaedah tugas () dalam model pengguna.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukmenggunakan semangat untuk menentukan hubungan bermaksud menentukan array mudah, yang dipanggil $ hubungan.
<span><span><?php </span></span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> { </span></span><span> <span>// model code here! </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masukIni mempunyai kesan yang sama. Ardent menggunakan konvensyen penamaan yang sama untuk mengikat nama dan kaedah, tanpa perlu menulis satu demi satu.
Walau bagaimanapun, terdapat banyak penyesuaian yang boleh anda lakukan: Setiap elemen dalam $ RelationsData mempunyai kunci (ya, nama kaedah hubungan) dan array dengan beberapa parameter.<span><span><?php </span></span><span> </span><span> <span>public function postSignup() </span></span><span> <span>{ </span></span><span> <span>$rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>$messages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages); </span></span><span> </span><span> <span>if($validator->fails()) </span></span><span> <span>{ </span></span><span> <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages()); </span></span><span> <span>} </span></span><span> </span><span> <span>$user = new User; </span></span><span> </span><span> <span>$user->first_name = Input<span>::</span>get('first_name'); </span></span><span> <span>$user->last_name = Input<span>::</span>get('last_name'); </span></span><span> <span>$user->email = Input<span>::</span>get('email'); </span></span><span> <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password')); </span></span><span> </span><span> <span>if($user->save()) </span></span><span> <span>{ </span></span><span> <span>$status = 1; </span></span><span> <span>} </span></span><span> <span>else </span></span><span> <span>{ </span></span><span> <span>$status = 0; </span></span><span> <span>} </span></span><span> </span><span> <span>return Redirect<span>::</span>to('user/signup')->with('status', $status); </span></span><span> <span>}</span></span>
Salin selepas log masukSalin selepas log masuk- Parameter pertama (tanpa kunci, itu hanya yang pertama) menerangkan jenis hubungan (Hasone, Hasmany, milik, milik, morphto, morphmany).
- parameter kedua (tanpa kunci, itu hanya yang kedua) mentakrifkan model destinasi hubungan semasa;
- Parameter selanjutnya tidak mempunyai kedudukan tertentu, tetapi kunci. Mereka boleh:
-
- Foreignkey: Pilihan, digunakan untuk hasone, hasmany, milik dan milik;
- Jadual, Lain -lain, Timestamps dan Pivotkeys: Pilihan, digunakan untuk kepunyaan; Nama, Jenis dan ID: Digunakan dengan Morphto, Morphone dan Morphmany;
- Kesimpulan
- dengan pek besar kelebihan (juga muat turun 126k dan kemas kini yang kerap) Sangat sukar untuk mencari alasan untuk tidak menggunakan Ardent dalam aplikasi seterusnya. Ia sesuai untuk setiap jenis projek, dan menjadi lanjutan model Eloquent, ia mencapai keserasian penuh dengan projek Laravel.
Saya pasti mengesyorkannya. Adakah anda? Adakah anda telah mencubanya? Beritahu kami dalam komen di bawah!
Soalan Lazim (Soalan Lazim) Mengenai Model Laravel
Apakah perbezaan utama antara Laravel 4.2, 5.0, 7.x, dan 10.x Eloquent? Di Laravel 4.2, fasih adalah ORM mudah (pemetaan objek-objek) dengan operasi CRUD asas. Laravel 5.0 memperkenalkan ciri -ciri baru seperti pelbagai sambungan, pemadaman lembut, dan pengendalian acara. Laravel 7.x membawa pemuatan yang bersemangat, siri model, dan sumber API. Laravel 10.x telah meningkatkan lagi fasih dengan prestasi yang lebih baik, pengendalian ralat yang lebih baik, dan ciri -ciri canggih seperti operasi batch dan kilang model. Menambah model cerdas pintar diri untuk Laravel. Ia menyediakan pengesahan automatik atribut sebelum disimpan, yang mengurangkan jumlah kod pengesahan yang perlu anda tulis dalam pengawal anda. Ardent juga menyokong penjimatan model dan hubungan mereka yang selamat dari transaksi, yang memudahkan operasi menjimatkan kompleks. Sambungan pangkalan data dengan menentukannya dalam fail config/database.php anda. Kemudian, dalam model fasih anda, anda boleh menentukan sambungan mana yang hendak digunakan dengan harta sambungan $. Sebagai contoh, dilindungi $ connection = 'mysql2'; akan menggunakan sambungan 'MySQL2'. Ini dapat meningkatkan prestasi dengan ketara apabila bekerja dengan dataset yang besar. Anda boleh menggunakan kaedah dengan () dalam fasih untuk menentukan hubungan yang mana dengan beban yang bersemangat. 'Rekod tanpa benar -benar mengeluarkannya dari pangkalan data. Sebaliknya, timestamp yang dipadam ditetapkan. Anda boleh mengaktifkan pemadaman lembut dalam model yang fasih dengan menggunakan sifat softdeletes dan menambah lajur yang dipadam ke meja anda. Cara yang mudah untuk menjana contoh model baru untuk menguji atau membiakkan pangkalan data anda. Anda boleh menentukan kilang model yang menentukan nilai atribut lalai untuk model anda, dan kemudian gunakan kilang untuk membuat contoh baru dengan mungkir tersebut. > Ardent menyediakan kaedah Savenested () yang menjimatkan model dan semua model yang berkaitan dalam satu transaksi pangkalan data. Ini memastikan bahawa semua menyelamatkan berjaya, atau tidak ada, mengekalkan integriti data anda.
Bagaimana saya menggunakan sumber API di Laravel Eloquent? Anda boleh membuat kelas sumber yang mentakrifkan bagaimana model harus diubah, dan kemudian mengembalikan contoh kelas sumber dari laluan API anda. Atribut model terhadap satu set peraturan yang ditakrifkan dalam model sebelum menyimpan. Sekiranya pengesahan gagal, operasi menyimpan digugurkan dan ralat pengesahan tersedia melalui kaedah ralat (). () Kaedah dalam Laravel fasih adalah cangkuk kitaran hayat yang dipanggil apabila model itu 'boot', iaitu, dimuatkan ke dalam ingatan. Anda boleh menimpa kaedah ini dalam model anda untuk menambah tingkah laku yang harus berlaku apabila model itu dibuang, seperti mendaftarkan pendengar acara atau menyesuaikan konfigurasi model.
- Projek yang sangat asas. Walau bagaimanapun, jika anda tidak mahu menulis kod, jangan risau: Saya telah menyediakan penghijrahan yang boleh anda gunakan untuk menghasilkan pangkalan data. Gunakannya!
Atas ialah kandungan terperinci Ardent: Model Laravel pada steroid. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.
