У меня есть обычай RegisterController
который использует RegistersUsers
черта для регистрации пользователей.
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
use RegistersUsers;
...
}
И в файле web.php (где определены маршруты) я делаю следующее для регистрации маршрутов:
Route::auth();
Со стороны просмотра или внешнего интерфейса у меня есть настроенное представление (register.blade.php), где я добавляю дополнительные поля в форму регистрации пользователя, как показано ниже:
И на моем RegisterController у меня есть следующий метод для проверки формы
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'gitHubUserName' => 'required|string|max:255|unique:users',
'gitHubToken' => 'required|string|min:1',
'password' => 'required|string|min:6|confirmed',
]);
}
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, что моя таблица пользователей не хранит имя пользователя GitHub и токен GitHub.
у меня есть create
функция на моем RegisterController
который заботится об управлении (inserting
) данные в соответствующие таблицы, когда проверка проходит (users
это просто таблица обычных пользователей, заданная миграцией пользователей по умолчанию Laravel, и у меня есть еще одна таблица, в которой хранятся github userName и GitHubPwd).
Если я сделаю php artisan --version
, Я имею Laravel Framework 5.4.36
установлены. Также у меня есть PHP 7.1.9
установлены.
Теперь это работает абсолютно нормально в моей локальной среде разработки MAMP.
В тот момент, когда я помещаю это в контейнер AWS ECS и нажимаю кнопку «Регистрация» в моей форме регистрации пользователя, я вижу странные ошибки … так что это не работает.
Ниже приведены ошибки:
Ошибка 1: исключение PDO:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause'
Ошибка 2:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause' (SQL: select count(*) as aggregate from `users` where `gitHubUserName` = tony)
Короче говоря, я заметил, что вместо вызова моего собственного валидатора для проверки запроса формы, laravel предоставил RegisterUser
класс черты вызывает валидатор модели как показано ниже:
Поэтому я сослался на документацию Laravel Вот а также попробовал другой подход, добавив ручной валидатор, как описано в документации:
$validator = Validator::make(request(), [
'name' => 'required|string|max:255|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'gitHubUserName' => 'required|string|max:255|unique:users',
'gitHubToken' => 'required|string|min:1',
'password' => 'required|string|min:6|confirmed',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
Я тоже сделал composer dump-autoload, php artisan config:clear, php artisan cache:clear
после внесения вышеуказанного изменения в код.
Так что теперь я вижу другую ошибку:
А вот частичная (верхняя часть строк) стека вызовов:
in Controller.php (line 82)
at Controller->__call('validator', array(array('_token' => 'S0c2YolcTS4AzvxIaehe6OMZ0E4LZKnFTd55nmio', 'name' => 'Tony', 'email' => '[email protected]', 'password' => 'Secret', 'password_confirmation' => 'Secret', 'gitHubUserName' => 'attres', 'gitHubToken' => '4365463463546354635465')))
in RegistersUsers.php (line 31)
at RegisterController->register(object(Request))
И снова, все отлично работает в моем локальном док-контейнере или в среде разработки MAMP. Когда я создаю новый образ, контейнер и запускаю его в контейнере AWS ECS, я вижу эту проблему. Кто-нибудь знает, что может быть причиной такого странного поведения?
Я наконец понял свою проблему. Я не могу поверить, что я упустил синтаксис правила проверки, пытаясь выяснить причину.
Проблема заключается в этом правиле проверки в Validator::make()
метод:
‘gitHubUserName’ => ‘обязательно | строка | макс .: 255 | уникально: пользователи’,
Там не должно быть unique:users
потому что в таблице пользователей нет столбца gitHubUserName.
Я изменил правило, как показано ниже, и все снова заработало нормально:
‘gitHubUserName’ => ‘обязательно | строка | макс .: 255’
Других решений пока нет …