我想将一个变量从Controller发送到Laravel上的Trait

时间:2018-03-06 22:32:09

标签: php laravel-5

我有一个存储数据的控制器。这使用表单Request和在Trait上显示消息之后。我在3 API上使用相同的特性,但我想知道是否可以发送/添加到每个API的自定义消息的json /数组。例如,如果根据API创建了类别(类别创建成功,产品创建成功)。  这是我控制器上的商店

    public function store(StoreCategory $request)
{
    $data = request()->all();
    $newCategory = Category::create($data);    
    return $this->respondCreated(new CategoryResource($newCategory)); 
}

我正在使用像Resource这样的CategoryResource 这是我的特质

    public function respondCreated($data)
{
    return $this->setStatusCode(IlluminateResponse::HTTP_CREATED)->respond($data
    ->response()      
    );
}
    public function respond($data, $headers = [])
{
    $response = $data;
    return $response->setStatusCode($this->statusCode);        
}

CategoryResource代码:

public function toArray($request) {
    return [ 'id' => $this->id,
             'name' => $this->name,
             'parent_id' => $this->parent_id,
             'created_at' => $this->created_at,
             'updated_at' => $this->updated_at,
            ];
} 

是否可以为每个Api请求添加自定义消息?可以从控制器传递变量,并在添加自定义消息后将变量添加到数组中吗?

最诚挚的问候 对不起我的英语不好

1 个答案:

答案 0 :(得分:0)

您可以通过直接向模型添加属性来实现此目的:link

  

有时,在将模型转换为数组或JSON时,您可能希望添加数据库中没有相应列的属性。为此,首先为值定义一个访问器:

public function getHasMessageAttribute()
{
    return "the message that you want to pass";
}
  

创建访问者后,将属性名称添加到模型的appends属性中。请注意,属性名称通常在“snake case”中引用,即使访问者是使用“camel case”定义的:

{
/**
 * The accessors to append to the model's array form.
 *
 * @var array
 */
protected $appends = ['has_message'];
}

离开这里有很多方法但是;

最后通过CategoryResource传递消息

'message'=> $this->has_message,

如果您想将其与数据库条目分开,则可以始终使用with