Php Laravel 5.4.36在AWS ECS容器上注册新用户时工作不正常

Php Laravel 5.4.36在AWS ECS容器上注册新用户时工作不正常,php,docker,laravel-5.4,amazon-ecs,fpm,Php,Docker,Laravel 5.4,Amazon Ecs,Fpm,我有一个自定义的RegisterController,它使用RegisterUsers特性来注册用户 use Illuminate\Support\Facades\Validator; class RegisterController extends Controller { use RegistersUsers; ... } 在web.php(其中定义了路由)中,我执行以下操作来注册路由: Route::auth() 在视图或前端,我有一个自定义的视图(register.b

我有一个自定义的
RegisterController
,它使用
RegisterUsers
特性来注册用户

use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
       use RegistersUsers;
 ...
}
在web.php(其中定义了路由)中,我执行以下操作来注册路由:
Route::auth()

在视图或前端,我有一个自定义的视图(register.blade.php),在该视图中,我向register用户表单添加了其他字段,如下所示:

在我的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',
    ]);
}
请注意,my users表不存储GitHub用户名和GitHub令牌。

我的
RegisterController
上有一个
create
函数,当验证通过时,该函数负责管理(
插入
)数据到适当的表中(
用户
只是Laravel默认用户迁移提供的普通用户表,我还有另一个表存储github用户名和GitHubPwd)

如果我安装了php artisan--version
,我就安装了Laravel Framework 5.4.36
。我还安装了
PHP7.1.9

现在,这在我当地的MAMP开发环境中工作得非常好。

当我在AWS ECS容器上按下此按钮并单击用户注册表上的注册按钮时,我看到一些奇怪的错误。。。所以这是行不通的

以下是错误:

错误1:PDO异常:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause'
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause' (SQL: select count(*) as aggregate from `users` where `gitHubUserName` = tony)
错误2:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause'
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause' (SQL: select count(*) as aggregate from `users` where `gitHubUserName` = tony)
简而言之,我注意到,laravel提供的
RegisterUser
trait类调用模型验证器,而不是调用我自己的验证器进行表单请求验证,如下所示:

因此,我参考了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转储自动加载、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开发环境中,一切都很好。当我构建新映像容器并在AWS ECS容器上运行它时,我看到了这个问题有人知道这种奇怪行为的原因吗?

我终于找到了问题所在。我不敢相信我在试图找出原因时忽略了验证规则语法

问题在于
Validator::make()方法中的此验证规则:

'gitHubUserName'=>'必需|字符串|最大值:255 |唯一:用户'

不应该有
unique:users
,因为users表中没有gitHubUserName列

我改变了规则如下,一切又恢复正常:

'gitHubUserName'=>'必需|字符串|最大值:255'


我终于解决了我的问题。我不敢相信我在试图找出原因时忽略了验证规则语法

问题在于
Validator::make()方法中的此验证规则:

'gitHubUserName'=>'必需|字符串|最大值:255 |唯一:用户'

不应该有
unique:users
,因为users表中没有gitHubUserName列

我改变了规则如下,一切又恢复正常:

'gitHubUserName'=>'必需|字符串|最大值:255'