我有一个自定义RegisterController
,它使用RegistersUsers
特征来注册用户。
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
use RegistersUsers;
...
}
在web.php(定义了路由)中,我执行以下操作来注册路由:
Route::auth();
在View或frontend方面,我有一个自定义的视图(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',
]);
}
请注意我的用户表不存储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: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)
简而言之,我注意到的是,而不是调用我自己的验证器进行表单请求验证,laravel提供的RegisterUser
trait类调用模型验证器,如下所示: / p>
所以我提到了Laravel文档here,并通过添加手动验证器尝试了其他方法,如文档中所述:
$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开发环境中,一切正常。当我构建新映像,容器并在AWS ECS容器上运行它时,我看到了这个问题。 任何人都有任何关于这种奇怪行为可能是什么原因的线索?
答案 0 :(得分:0)
我终于弄明白了我的问题。在尝试找出原因时,我无法相信我忽略了验证规则语法。
问题在于Validator::make()
方法中的验证规则:
' gitHubUserName' => '需要|串|最大:255 |独特:用户',
不应该有unique:users
,因为users表中没有gitHubUserName列。
我更改了以下规则,一切都恢复正常了:
' gitHubUserName' => '需要|串|最高:255'