Php Laravel控制器从ServiceProvider获取值
我在控制器中有一个自定义验证来验证电话号码 控制器Php Laravel控制器从ServiceProvider获取值,php,validation,laravel,Php,Validation,Laravel,我在控制器中有一个自定义验证来验证电话号码 控制器 $this->validate($request, [ ... 'phonenumber' => 'required|phone_number' ]); 应用服务提供商 public function boot(){ $this->app['validator']->extend('is_phone', function($attribute, $value, $p
$this->validate($request, [
...
'phonenumber' => 'required|phone_number'
]);
应用服务提供商
public function boot(){
$this->app['validator']->extend('is_phone', function($attribute, $value, $parameters) {
...
if($rest_result->status == 200){
// I need this $rest_result->phone_number ;
return true ;
}
return false ;
});
}
我实现了验证器,并将它放在AppServiceProvider
的boot
方法中,这样我就可以在其他地方重用它了,这样就行了。我使用网络服务来验证号码,如果通话成功,该服务会将号码格式化为我在应用程序中需要的相应国家格式
如何将该值传递回控制器
奖金:如果它还可以覆盖
旧的
中的值,这样表单也能得到它,那就太酷了我找到了一种方法,可以一次性处理所有这些
完成验证后,对请求使用merge
方法将验证和修改后的输入合并回请求对象
你会把下面的
public function boot(){
$this->app['validator']->extend('is_phone', function($attribute, $value, $parameters) {
...
if($rest_result->status == 200){
request()->merge(['phone' => $rest_result->phone]);
return true;
}
return false ;
});
}
现在在您的控制器中,该手机将包含在请求中。。。显然,在您实际创建验证对象之前,不会将电话号码替换为服务返回的电话号码
$phone = request()->phone;
它应该在关闭时可用。是的,我想我说得太快了,我正在尝试。我之前无法访问会话,因此我假设我无法访问请求,但我确实需要它在控制器中,因为如果它有效,它将被保存。您的回答非常有用,我无法访问
session::FlashInput
但是,我必须通过request()->session()
来保存变量,即使无法访问Flash,您也不再需要访问会话。如果您将其合并到请求本身中,只要您使用redirect()->withInput()
,Laravel就会自动将请求中的所有数据闪存到会话中。由于Laravel将为您处理该问题,因此它将可用于old()
函数。