Laravel - Symfony \ Component \ Debug \ Exception \ FatalThrowableError: синтаксическая ошибка, неожиданное 'if' (T_IF) - PullRequest
0 голосов
/ 10 октября 2019

Я разрабатываю приложение, используя Angular-7 в качестве внешнего интерфейса и Laravel-5.8. Я использую Laravel Spatie для управления пользователями. У меня есть эти три таблицы:

Таблица

CREATE TABLE `client` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `client_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `trips` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `dispatch_datetime` datetime DEFAULT NULL,
  `loading_date` date DEFAULT NULL,
  `loaded_from` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `destination` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `users` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Из приведенных выше таблиц у меня есть три класса: Пользователь, Клиент и Поездка. Я использовал Laravel Spatie, чтобы пользователи могли иметь доступ только к тем данным, на которые у них есть разрешение. Это работает отлично.

Теперь я хочу добиться от ApiController следующего:

  1. Зарегистрированный пользователь должен иметь возможность просматривать только те поездки, которые егозапуск клиента.

  2. Если вошедший в систему пользователь принадлежит клиенту, для которого client_id имеет значение MBB, он должен иметь возможность просматривать все поездки для всех клиентов в базе данных, кромеу него нет разрешения на просмотр поездок.

    public function index(Request $request){
        $user = Auth::user();
        $userClientId = Auth::user()->client_id;

        if(!Auth::user()->hasPermissionTo('View Trip')){
            return response()->json([ "message" => 'User do not have permission'], 401);
        }

        try{  

            if(Auth::user()->client_id == 'MBB')
            {      
                if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
                    $trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
                } else if(($request->get('sort')!='null' && $request->get('sort')!='')){
                    $trip = Trip::orderby($request->get('sort'), $request->get('order'))->paginate(10);
                }
                else if($request->get('search'))
                    $trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
                else
                    $trip = Trip::paginate(10);
            }
            else 
            {
                $trip = Trip::where('client_id', $userClientId)
                if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
                    $trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
                } else if(($request->get('sort')!='null' && $request->get('sort')!='')){
                    $trip = $trip->orderby($request->get('sort'), $request->get('order'))->paginate(10);
                } else if($request->get('search')) {
                    $trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
                } else{
                    $trip = $trip->paginate(10);
                }

            }
            return response()->json($trip, 200);
        }
        catch(QueryException $e)
        {

            $errorCode = $e->errorInfo[1];

            return response()->json($errorCode);
        }
    }

Когда я загрузил страницу, я получил эту ошибку:

синтаксическая ошибка, неожиданная 'if '(T_IF)

Затем, когда я нажал на ошибку в консоли, я перешел на эту страницу в Laravel:

syntax error

Итак, я замечаю, что ошибка происходит из оператора else (строка 56 на диаграмме, где я выделил желтый), где client_id не является MBB. Я посмотрел на утверждение и не увидел ничего плохого. Как мне устранить эту ошибку?

1 Ответ

2 голосов
/ 10 октября 2019

Вы забыли точку с запятой в строке 55. Неожиданные ошибки в большинстве случаев относятся к синтаксическим ошибкам

$trip = Trip::where('client_id', $userClientId);
                                               ^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...