在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'