私がLaravelについて気に入らない(少数の)ことの1つは、検証コードをコントローラーからモデルに簡単に移動できないことです。ソフトウェアを書くとき、私は「脂肪モデル、スキニーコントローラー」の原則を適用するのが好きです。ですから、私にとって、コントローラーに検証コードを書くことは良いことではありません。 これを解決するために、Laravel 4の素晴らしいパッケージであるArdentを紹介したいと思います。より正確には、Ardentは「Laravel Framework 4のEloquent ORMの自己検証スマートモデル」として現れます。言い換えれば、正確に必要なもの!
ご想像のとおり、基本的には雄弁なモデルクラスの拡張です。このパッケージには、入力検証などの新しい機能、ユーティリティ、およびメソッドが付属しています。
キーテイクアウト
強化された検証:ARDENTは、モデル内でルールを直接定義できるようにすることにより、検証プロセスを簡素化し、特に大規模なプロジェクトでコード組織と保守性を向上させます。
- モデルの自動hydrate:この機能は、フォーム入力からモデル属性を自動的に入力し、コントローラーのボイラープレートコードを削減し、コードベースのクリーナーをより効率的にする。
- モデルフック:ARDENTは、保存、更新、削除、削除などの特定のライフサイクルモーメントで実行されるメソッドであるモデルフックを導入し、データハンドリングをより強く制御します。 単純化された関係:モデル関係を定義することは、単純な配列構造( `$ lelationsData`)を使用して、熱心でより合理化されており、Laravelモデルの関係管理の複雑さを減らします。
- 自動パージ冗長データ:ARDENTは、確認フィールドやCSRFトークンなどの入力から不要なデータを自動的に破棄し、関連するデータのみが処理および保存されるようにします。
- 私たちのテストアプリケーション
- Ardentを使用している間に楽しむことができる利点をよりよく理解するために、少しテストアプリケーションを設定します。複雑なものは何もありません:シンプルなTo Doリストアプリ。 もちろん、私は完全なアプリケーションを実装するつもりはありません。いくつかの原則を説明したいので、いくつかのコントローラーとモデルを作成します。ビューはありません。その後、Ardentを使用してコードを「翻訳」します
- To Doリストは、2つの異なるエンティティをカウントします:
id
first_name
- last_name
-
メール
- パスワード
- タスク
- id
- name
ステータス(完了 /完了) -
- 本当に基本的なプロジェクト。ただし、コードを作成したくない場合は、心配しないでください。データベースの生成に使用できる移行をすでに準備しています。使用!
- コマンドを使用して移行ファイルを作成します
- そして、このコードでファイルを入力してください:
-
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><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>
始めましょう!
Ardent
のインストールARDENTのインストールは、作曲家にとって非常に簡単です。プロジェクトのcomposer.jsonファイルに依存関係を追加するだけです。
<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> <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><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></span>
チェックしてみましょう:ここにはこれ以上検証手順はありません。彼らはすべて姿を消した。ただし、「移動」だけではありません。$ user-> save()メソッドは、検証フェーズにいくつかの問題がある場合、falseを返します。次に、$ user-> errors() - > all()メソッドでエラーを取得できます。奇妙なクラスはありません:返されたオブジェクトは、Laravelで作業している間にすでに出会った可能性のある古典的なメッセージバッグです。
ただし、必要に応じて、$ user-> balidationerrorsプロパティを使用することもできます。その場合、またはフィールド固有のエラーを取得する場合は、$ user-> balidationerrors-> get( 'field_name')を使用してください。さて、あなたは「OK、しかし、コードの行が少ないことを超えて、本当の利点は何ですか?」
最も重要なことから始めましょう。コード組織を改善すると、プロジェクトの保守性が向上します。簡単なアプリケーションでは、優先事項とは感じられませんが、より大きなプロジェクトに関しては、1つの間違った決定を簡単に台無しにすることができます。現実世界の状況の例を作りましょう。私たちは素晴らしいToDoリストアプリケーションを開発しましたが、それは本当に急速に成長しています。モバイルアプリケーションには間違いなくRESTFUL APIが必要です。コントローラーを「通常」の方法で使用することは、APIの別のサインアップルーチンを書き込むことを意味します。同じコードを持つ2つの異なるブロック!これは良くありません。古き良き乾燥(自分自身を繰り返さないでください)の原則はどこですか?
したがって、ベストプラクティスは、すべてを処理するモデルにsignup()メソッドを作成することです。 Ardentを使用すると、検証から保存手順まで、本当にすべてを処理することを意味します。それがなければ、最初のフェーズを達成することはできませんでした
2番目の利点は、より実用的なものです。モデルオートhydrateです。一緒に発見しましょう。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><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>
この機能を使用するには、アクティブ化する必要があります。このように、モデルの$ autohydrateEntityFromInputをTrueに切り替えるだけです。また、ビジネスロジックには必要ない冗長なデータがあることがよくあります。 _confirmationフィールドまたはCSRFトークンについて考えてください。さて、モデルの$ autopurgeredundantattributesプロパティでそれらを捨てることができます。前と同じように、それをtrueに切り替えてください。
<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> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
言及する価値のあるもう1つの良い機能は、モデルフックの導入です。それらは、本質的に、実装された場合、特定の実行モーメントで呼び出される方法のリストです。したがって、例を作成するために、aghtupdate()メソッドは、すべての更新()呼び出しの前に呼び出されます。前のValidate()メソッドは、すべての検証の前に呼び出されます。これらすべての方法のリストを次に示します
- beforecreate()
- abhercreate()
- beforesave()
- abhersave()
befored afthupdate() - beforedelete()
- afterdelete()
- beforevalidate()
- aftervalidate()
php artisan migrate:make todo_setup
すべての「前」メソッドにはブールリターン値があります。 Trueの場合、次の操作が正常に実行されます。メソッドがfalseを返すと、操作は停止します。上記の方法では、検証の直後に、beforesave()メソッドでナメクジを生成しました(および適切なフィールドを埋めます)。beforesave()とabhersave()についての特定のヒントもあります。実行時に宣言できます。見てください:
<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>
たぶん、パスワードハッシュを処理するbeforesave()?
ユーザーが手順を削除する直前に
またはクリーニングフック?<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><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>
関係の定義(熱心な方法)
熱心では、以前よりも短い方法で関係を定義することもできます。モデル間の関係を実際に定義する方法を見てみましょう。次の例は、ユーザーモデルのtasks()メソッドを示しています。
ARDENTを使用して関係を定義することは、$ RelationsDataと呼ばれる単純な配列を定義することを意味します。
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
これはまったく同じ効果があります。 Ardentは、同じ命名条約を使用して、名前と方法を1つずつ書くことなくバインドします。ただし、できることはたくさんあります:
<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>
$ RelationsDataのすべての要素には、キー(はい、関係のメソッド名)といくつかのパラメーターがある配列があります。
最初のパラメーター(キーなしで、最初のパラメーター)は、関係タイプ(hasone、hasmany、belongsto、belongstomany、morpho、morphone、morphmany)を説明しています。
2番目のパラメーター(キーなしで、2番目のパラメーター)は、現在の関係の宛先モデルを定義します。<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></span>
さらなるパラメーターには特定の位置がありませんが、キーがあります。彼らは次のとおりです:- foreignkey:オプション、hasone、hasmany、belongsto、およびbelongstomany;
- に使用されます テーブル、その他のキー、タイムスタンプ、ピボットキー:オプション、belongStomanyに使用;
- 名前、タイプ、ID:Morphto、Molphone、Morphmanyで使用;
-
- 結論
- 大きな利点(126Kのダウンロードや頻繁な更新)がある大きなパックを使用して、次のアプリで熱心を使用しない理由を見つけることは非常に困難です。あらゆる種類のプロジェクトに適しており、雄弁のモデルの拡張であるため、Laravelプロジェクトとの完全な互換性を実現します。 私は間違いなくそれをお勧めします。あなたは?試してみましたか?以下のコメントでお知らせください!
- Laravelモデルに関するよくある質問(FAQ)
laravel eloquentでAPIリソースを使用するにはどうすればよいですか?
laravel eloquentのAPIリソースを使用すると、モデルとモデルコレクションをJSON形式に変換してAPIで使用できます。モデルの変換方法を定義するリソースクラスを作成し、APIルートからそのリソースクラスのインスタンスを返すことができます。保存する前に、モデルで定義された一連のルールに対するモデルの属性。検証が失敗した場合、保存操作が中止され、ERRORS()メソッドを使用して検証エラーが利用可能です。 ()Laravel Eloquentのメソッドは、モデルが「起動」されているとき、つまりメモリにロードされたときに呼び出されるライフサイクルフックです。このメソッドをモデルにオーバーライドして、イベントリスナーの登録やモデルの構成のカスタマイズなど、モデルの起動時に発生する動作を追加できます。
以上がARDENT:ステロイドのLaravelモデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

Laravelのサービスコンテナとサービスプロバイダーは、そのアーキテクチャの基本です。 この記事では、サービスコンテナ、詳細サービスプロバイダーの作成、登録、および実用的な使用法を例で説明します。 Oveから始めます

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック



