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'