>我不喜欢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中文网其他相关文章!