在AWS ECS容器上注册新用户时,Laravel 5.4.36无法正常工作

我有一个自定义的RegisterController ,它使用RegistersUsers trait来注册用户。

 use Illuminate\Support\Facades\Validator; class RegisterController extends Controller { use RegistersUsers; ... } 

在web.php(定义路由的地方),我做了以下注册路由: Route::auth();

在视图或前端方面,我有一个自定义的视图(register.blade.php),我在其中添加额外的字段注册用户forms如下所示: 在这里输入图像说明

并在我的RegisterController,我有以下方法来validation窗体

 /** * 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令牌。

我在我的RegisterController上有一个create函数,在validation通过时pipe理( inserting )数据到适当的表中( users只是Laravel默认用户迁移提供的普通用户表,而我有另一个存储github userName和GitHubPwd的表) 。

如果我做的php artisan --version ,我已经安装了Laravel Framework 5.4.36 。 另外我安装了PHP 7.1.9

现在在我当地的MAMP开发环境中工作得很好。

当我在AWS ECS容器上推送它,然后单击我的用户registry单上的注册button,我看到一些奇怪的错误…所以这是行不通的。

以下是错误:

错误1:PDOException:

 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) 

所以总之,我注意到的是, 而不是调用我自己的validation器进行表单请求validation,laravel提供的RegisterUser特性类正在调用Modelvalidation器 ,如下所示:

在这里输入图像说明

所以我在这里提到了Laravel文档,并尝试使用其他方法,如文档中所述添加手动validation器:

  $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' => 'tony@example.com', 'password' => 'Secret', 'password_confirmation' => 'Secret', 'gitHubUserName' => 'attres', 'gitHubToken' => '4365463463546354635465'))) in RegistersUsers.php (line 31) at RegisterController->register(object(Request)) 

再次,在我的本地docker容器或MAMP开发环境中,一切正常。 当我构build新的映像,容器并在AWS ECS容器上运行时,我看到了这个问题。 任何人有任何线索可能是这种奇怪的行为的原因?

我终于明白了我的问题。 我不能相信,我试图找出原因,忽略了validation规则的语法。

问题在于Validator::make()方法中的validation规则:

'gitHubUserName'=>'required | string | max:255 | unique:users',

不应该有unique:users因为用户表中没有gitHubUserName列。

我改变了下面的规则,一切又开始正常工作:

'gitHubUserName'=>'required | string | max:255'