Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel控制器从ServiceProvider获取值_Php_Validation_Laravel - Fatal编程技术网

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()
函数。