如何在Laravel中制作特质

时间:2016-10-27 15:30:05

标签: laravel-5.3

如果我想在我的模型

上使用此特征,请在何处制作文件

如果我想在此内容中使用此特征,该文件应如何显示:

trait FormatDates
{
    protected $newDateFormat = 'd.m.Y H:i';


    // save the date in UTC format in DB table
    public function setCreatedAtAttribute($date){

        $this->attributes['created_at'] = Carbon::parse($date);

    }

    // convert the UTC format to my format
    public function getCreatedAtAttribute($date){

        return Carbon::parse($date)->format($this->newDateFormat);

    }

    // save the date in UTC format in DB table
    public function setUpdatedAtAttribute($date){

        $this->attributes['updated_at'] = Carbon::parse($date);

    }

    // convert the UTC format to my format
    public function getUpdatedAtAttribute($date){

        return Carbon::parse($date)->format($this->newDateFormat);

    }

    // save the date in UTC format in DB table
    public function setDeletedAtAttribute($date){

        $this->attributes['deleted_at'] = Carbon::parse($date);

    }

    // convert the UTC format to my format
    public function getDeletedAtAttribute($date){

        return Carbon::parse($date)->format($this->newDateFormat);

    }
}

以及如何在用户模型类中应用它......

3 个答案:

答案 0 :(得分:52)

嗯,laravel跟随PSR-4,所以你应该把你的特征放在:

app/Traits

然后,您需要确保使用该路径命名特征,所以请放置:

namespace App\Traits;

位于trait

的顶部

然后确保在保存文件时,文件名与特征名称匹配。因此,如果您的特征被称为FormatDates,则需要将文件另存为FormatDates.php

然后'使用'它通过添加:

在您的用户模型中
use App\Traits\FormatDates;

位于模型顶部,但低于namespace

然后添加:

use FormatDates;

就在课堂内部,因此对于您的用户模型,假设您使用的是laravel默认值,您将得到:

use App\Traits\FormatDates;

class User extends Authenticatable
{
    use Notifiable, FormatDates;

...
}

请记得转储自动加载器:

composer dump-autoload

答案 1 :(得分:12)

要通过命令创建特征,我可以这样做:

  php artisan make:command TraitMakeCommand

然后您在app / Console / Commands中拥有此命令

它将创建从Command扩展的此命令,但是您必须将其更改为GeneratorCommand,后者是用于创建类的命令,因此:

  use Illuminate\Console\Command;
  class TraitMakeCommand extends Command{

您应该有这个:

  use Illuminate\Console\GeneratorCommand;
  class TraitMakeCommand extends GeneratorCommand{

然后,删除__construct()和handle()方法,因为您将不需要它们。

您需要在app / Console / Commands / stub中创建一个名为traits.stub的文件,该文件将成为您特征的基础:

  <?php

  namespace TraitNamespace;

  trait {{class}}
  {
   // 
  }

,代码应如下所示:

      /**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'make:trait {name}';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Create a new trait';

/**
 * The type of class being generated.
 *
 * @var string
 */
protected $type = 'Trait';

/**
 * Get the stub file for the generator.
 *
 * @return string
 */
protected function getStub()
{
    return __DIR__ . '/stubs/trait.stub';
}

/**
 * Get the default namespace for the class.
 *
 * @param string $rootNamespace
 *
 * @return string
 */
protected function getDefaultNamespace($rootNamespace)
{
    return $rootNamespace . '\Traits';
}

所有这些之后,您可以使用以下命令创建特征:

php artisan make:trait nameOfTheTrait

答案 2 :(得分:0)

使用此包,您可以使用 php artisan 命令创建创建 Repository、Repository with Interface、Service、Trait 表单命令行。

<块引用>

composer require theanik/laravel-more-command --dev

用于创建特征

<块引用>

php artisan make:trait {特性名称}

Git 存储库:https://github.com/theanik/laravel-more-command