gpt4 book ai didi

php - 在 Laravel Transformers 上使用中间件调用 null 上的成员函数 createData()

转载 作者:可可西里 更新时间:2023-10-31 23:35:56 25 4
gpt4 key购买 nike

所以我创建了一个 Controller ,用于使用 2 种方法进行身份验证(token()/native)_)。我正在使用分形更改器(mutator)返回响应。 token 方法对我来说工作正常,但 loginAndroid() 返回

"Call to a member function createData() on null" error.

有什么帮助吗?谢谢。

class AuthController extends RestController
{
protected $transformer = UserTransformers::Class;

public function __construct()
{
$this->middleware('auth:api', ['except' => ['login', 'loginAndroid']]);
}

public function login(Request $request)
{
$credentials = $request->only(['username', 'password']);

if (!$token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}

return $this->respondWithToken($token);
}

public function loginAndroid(Request $request)
{
$credentials = $request->only(['username', 'password']);

if (Auth::attempt($credentials)) {
//$user = Auth::user()->with(['employees']);
$userdata = User::with(['employees', 'employees.role', 'employees.branch'])->find(Auth::id());
//$success['token'] = $user->createToken('MyApp')->accessToken;
//return response()->json($userdata, 200);
//return $userdata;
$response = $this->generateItem($userdata);

return $this->sendResponse($response, 201);
} else {
return response()->json('gagal', 401);
}
}
}

这是我的restcontroller

abstract class RestController extends Controller
{
protected $manager;

protected $transformer;

public function __construct()
{
$this->manager = new Manager();
}

protected function generateItem($model, $transformer = null)
{
if (!is_null($transformer)) {
return new Item($model, new $transformer);
}

return new Item($model, new $this->transformer);
}

protected function generateCollection($model, $transformer = null)
{
if (!is_null($transformer)) {
return new Collection($model, new $transformer);
}

return new Collection($model, new $this->transformer);
}

protected function sendResponse(ResourceInterface $data, $status = 200)
{
return response()->json(
$this->manager->createData($data)->toArray(),
$status
);
}

protected function sendNotFoundResponse($status)
{
return response()->json($status, 404);
}

protected function sendIseResponse($status)
{
return response()->json($status, 500);
}
}

最佳答案

它看起来像你的 sendResponse()方法取决于 $this->manager .然而,$this->managerRestController::__construct() 中设置你已经覆盖了 __construct() AuthController::__construct() 中的方法.所以,为了有 $this->manager可用,您应该从 AuthController 调用父构造函数,如下所示:

class AuthController extends RestController
{
protected $transformer = UserTransformers::Class;

public function __construct()
{
parent::__construct(); // call the parent constructor where
// $this->manager gets initialized
$this->middleware('auth:api', ['except' => ['login', 'loginAndroid']]);
}

... etc

关于php - 在 Laravel Transformers 上使用中间件调用 null 上的成员函数 createData(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55278935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com