如何在Laravel中创建Trait

snvhrwxg  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(127)

如果我想在我的模特身上使用这个特性,在哪里创建文件
如果我想在里面有这个trait,这个文件应该是什么样子:

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);

    }
}

以及如何将其应用于例如用户模型类.

cvxl0en2

cvxl0en21#

好吧,laravel遵循PSR-4,所以你应该把你的特性放在:
app/Traits
然后,你需要确保你的trait命名为该路径,所以放置:

namespace App\Traits;

trait的顶部
然后确保在保存文件时,文件名与trait名称匹配。因此,如果trait名为FormatDates,则需要将文件保存为FormatDates.php
然后在你的User模型中“使用”它,方法是:

use App\Traits\FormatDates;

位于模型的顶部,但低于namespace
然后加上:

use FormatDates;

就在类内部,所以对于你的User模型,假设你使用的是laravel默认值,你会得到:

use App\Traits\FormatDates;

class User extends Authenticatable
{
    use Notifiable, FormatDates;

...
}

记得把自动装弹机扔掉
composer dump-autoload

wfypjpf4

wfypjpf42#

要通过命令创建trait,我这样做:

php artisan make:command TraitMakeCommand

然后在app/Console/Commands中有此命令
它将从Command扩展创建此命令,但您必须将其更改为用于创建Class的GeneratorCommand,因此改为:

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

你应该有这个:

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

然后,delete __construct()和handle()方法,因为你不需要它们。
你需要在app/Console/Commands/stubs中创建一个名为traits.stub的文件,它将成为你的trait的基础:

<?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/traits.stub';
    }

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

在所有这些之后,你可以用这个命令创建一个trait:

php artisan make:trait nameOfTheTrait
v7pvogib

v7pvogib3#

使用这个包,你可以创建创建仓库,仓库接口,服务,特质形式的命令行使用php工匠命令。

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

对于创建trait

php artisan make:trait {Trait Name}

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

相关问题