Laravel分形变压器,如何通过并获得额外的变量

eve*_*isk 2 php laravel laravel-5.2

我正在使用Dingo API在Laravel 5.2中创建一个API,并且有一个控制器使用以下命令返回数据

 return $this->response->paginator($rows, new SymptomTransformer, ['user_id' => $user_id]);
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何user_id在SymptomTransformer中检索值!尝试了许多不同的方法并尝试了上课,但是我对Laravel和OOP还是比较陌生,因此如果有人可以将我指向正确的方向,将不胜感激。

以下是我的变压器课。

class SymptomTransformer extends TransformerAbstract
{
    public function transform(Symptom $row)
    {  
        // need to get user_id here
        return [
            'id' => $row->id,
            'name' => $row->name,
            'next_type' => $next,
            'allow' => $allow
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

xAo*_*Aoc 6

您可以将额外的参数传递给转换器构造函数。

class SymptomTransformer extends TransformerAbstract
{
     protected $extra;

     public function __construct($extra) {
         $this->extra = $exta;
     }

      public function transform(Symptom $row)
      {  
         // need to get user_id here
         dd($this->extra);
         return [
            'id' => $row->id,
            'name' => $row->name,
            'next_type' => $next,
            'allow' => $allow
        ];
      }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话

return $this->response->paginator($rows, new SymptomTransformer(['user_id' => $user_id]));
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以通过设置器设置额外的参数。

class SymptomTransformer extends TransformerAbstract
{
    public function transform(Symptom $row)
    {  
        // need to get user_id here
        dd($this->test_param);
        return [
            'id' => $row->id,
            'name' => $row->name,
            'next_type' => $next,
            'allow' => $allow
        ];
    }
    public function setTestParam($test_param)
    {
        $this->test_param = $test_param;
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

$symptomTransformer = new SymptomTransformer;
$symptomTransformer->setTestParam('something');
return $this->response->paginator($rows, $symptomTransformer);
Run Code Online (Sandbox Code Playgroud)