如果我想在我的模型
上使用此特征,请在何处制作文件如果我想在此内容中使用此特征,该文件应如何显示:
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);
}
}
以及如何在用户模型类中应用它......
答案 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 {特性名称}