>我不喜歡Laravel的(幾件)事情之一是,您無法輕鬆地將驗證代碼從控制器移動到模型。當我編寫軟件時,我喜歡應用“脂肪模型,瘦控制器”原理。因此,對我而言,在控制器中編寫驗證代碼不是一件好事。
> 為了解決這個問題,我想介紹Ardent,這是Laravel 4的絕佳包裝。更確切地說,Ardent將自己作為“為Laravel Framework 4的雄辯的Orm Orm的自我驗證的智能模型)。換句話說:正是我們需要的!> 您可以想像,這基本上是雄辯的模型類的擴展。該軟件包帶有一些新功能,實用程序和方法,用於輸入驗證和其他小事情。
鑰匙要點
>用戶
> first_name
>名稱
然後,用此代碼填充文件: >現在我們有了桌子。是時候創建我們的模型了。即使在這裡,我們也有很少的行寫。這是用戶模型(也是默認的模型)。 我剛剛添加了任務方法來描述與任務模型的關係。
然後,在更新後,您只需要在模型中擴展熱心類: …然後您準備出發!
>
>所以,現在的問題是:我們要在控制器中寫什麼?
>這裡不再有驗證指令。他們都消失了。但是,這不僅是“移動”:$ user-> save()方法現在將返回false,如果驗證階段存在一些問題。然後,您將能夠使用$ user-> errors() - > all()方法檢索錯誤。沒有奇怪的課程:返回的對象將是一個經典的消息包,您可能已經在與Laravel合作時已經遇到了。
讓我們從最重要的開始:更好的代碼組織意味著更好的項目可維護性。在簡單的應用程序中,您無法將其視為優先事項,但是在更大的項目方面,事情很容易被一個錯誤的決定弄亂。讓我以現實世界的情況為例。我們開發了很棒的待辦事項列表應用程序,並且它正在迅速增長。我們絕對需要一個安息的API來進行移動應用程序。以“正常”方式使用控制器將意味著為API編寫另一個註冊例程。具有相同代碼的兩個不同的塊!這是不好的。良好的老式乾燥(不要重複自己)原理在哪裡?
>
>
>
將具有與 從十三行中,我們剛剛降到了整個註冊過程中的七個。
現在,該過程比以前更乾淨。 模型鉤 >
>一個經典的示例可能是保存過程之前的一些數據詳細說明。像這樣: >每個“之前”方法都有一個布爾返回值。如果為true,則以下操作正常執行。如果方法返回false,則該操作將停止。在上面的方法中,我們在驗證之後,用beforesave()方法生成了一個sl(並填充了適當的字段)。 >關於beforesave()和後save()也有一個特定的提示:您可以在運行時聲明它們。看: 讓我們考慮一下這些方法在我們的應用程序中的幾種可能用途。 也許是一個可以處理密碼哈希的beforesave()? 或用戶刪除過程之前的清潔掛鉤? 有很多可能性。 >熱心,您還可以比以前更短的方式定義關係。讓我們看看我們如何實際定義模型之間的關係:以下示例顯示用戶模型中的task()方法。 使用Ardent定義關係意味著定義一個簡單的數組,稱為$ REMAINDELDATA。 這具有完全相同的效果。 Ardent使用相同的命名約定來綁定名稱和方法,而無需一個一個一個。
但是,您可以執行許多自定義: $ resptiondata中的每個元素都有一個鍵(是的,關係的方法名稱)和一個帶有某些參數的數組。 >第一個參數(沒有鍵,只是第一個)描述了關係類型(Hasone,Hasmany,Altersto,Alterstomany,Morphto,Morphto,Morphone,Morphmany)。
如何ardent Enhindent Enherave Laravel模型?為Laravel添加了一個自動化的智能雄辯模型。它提供了自動驗證屬性在保存之前的驗證,這減少了您需要在控制器中編寫的驗證代碼的量。 Ardent還支持模型及其關係的嵌套交易安全保存,這簡化了複雜的保存操作。 我如何在laravel雄辯中使用軟刪除? soft of laravel elo felogent of laravel elo ologent of of'delete允許您' ``記錄而沒有實際將其從數據庫中刪除。相反,設置了DELETED_AT時間戳。您可以通過使用軟骨骼特徵並將deleted_at列添加到您的表中。 > 如何artent whand hander ander驗證? php artisan migrate:make todo_setup
<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>
<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>
作曲家
>
<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>
<span>{
</span> <span>"require": {
</span> <span>"laravelbook/ardent": "2.*"
</span> <span>}
</span> <span>}</span>
>
在“正常”情況下,我們會做這樣的事情:
>
<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>
<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>
我們的postignup()方法準確計算了13行代碼。即使看起來很困難,熱心也可以進一步降低該數字。看看這個示例:php artisan migrate:make todo_setup
<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>
<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>
<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>
<span>{
</span> <span>"require": {
</span> <span>"laravelbook/ardent": "2.*"
</span> <span>}
</span> <span>}</span>
php artisan migrate:make todo_setup
<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>
<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>
<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>
定義關係(熱心方式)
<span>{
</span> <span>"require": {
</span> <span>"laravelbook/ardent": "2.*"
</span> <span>}
</span> <span>}</span>
<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>
<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>
其他參數沒有特定的位置,而是一個鍵。他們可能是:
>名稱,類型和ID:與Morphto,Morphone和Morphmany一起使用;
經常詢問有關Laravel模型的問題(常見問題解答)
Laravel 4.2、5.0、7.x和10.x雄辯之間的關鍵差異是什麼?在Laravel 4.2中,雄辯是具有基本CRUD操作的簡單ORM(對象相關映射)。 Laravel 5.0引入了新功能,例如多個連接,軟刪除和事件處理。 Laravel 7.x帶來了急切的負載,模型序列化和API資源。 Laravel 10.x通過提高性能,更好的錯誤處理以及諸如批處理操作和模型工廠之類的高級功能進一步增強了雄辯。
>我如何在Laravel雄辯中使用多個連接?數據庫連接通過在您的config/database.php文件中定義它們。然後,在雄辯的模型中,您可以指定用於$ Connection屬性的連接。例如,受保護$ Connection ='mysql2';使用“ mySQL2”連接。
>
laravel雄辯中的急切加載是什麼?在使用大型數據集時,這可以顯著提高性能。您可以在雄辯中使用with with()方法來指定與急切的負載的關係。
laravel雄辯的模型工廠是什麼?為了生成用於測試或播種數據庫的新模型實例的方便方法。您可以定義一個模型工廠,該工廠指定模型的默認屬性值,然後使用該工廠使用這些默認值創建新實例。
如何如何保存熱心的hand hander handing nested transed-save保存? > Ardent提供了一種Savenested()方法,該方法將模型及其所有相關模型保存在單個數據庫事務中。這樣可以確保所有保存成功,或者無需這樣做,以維護數據的完整性。 >如何在Laravel雄辯中使用API資源?
API資源在Laravel雄辯中允許您將模型和模型集合轉換為JSON格式,以用於API中。您可以創建一個資源類,該類別定義應該如何轉換模型,然後從API路由返回該資源類的實例。
以上是熱心:類固醇上的Laravel模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!