Вызов функции-члена createData() для null с использованием промежуточного программного обеспечения в Laravel Transformers

Поэтому я создал контроллер для аутентификации с двумя методами (token()/native)_). Я использую фрактальный преобразователь для возврата ответа. Метод токена у меня работает нормально, но 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);
        }
    }
}

это мой рестконтроллер

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);
}
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, ваш метод sendResponse() зависит от $this->manager. Однако $this->manager устанавливается в RestController::__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

Другие вопросы по теме