为什么我的变量在 Laravel 5.4 Blade 文件中显示不正确的值?

Why is my variable displaying incorrect value in Laravel 5.4 Blade file?

我有一个变量 $country_code,它在我的表单的一部分显示正确的值,但在另一部分不显示。为什么会这样?

这是我的代码:

{{ Form::open(['action' => ['PinVerificationController@valid'],'id'=>'pin_code_form']) }}
    //$country_code shows 1
    We sent a text message to {{$country_code}} {{$phone_number}}. You should receive it within a few seconds.<br><br>
    {{ Form::label('Pin Code', null, ['class' => 'control-label']) }}
    {{ Form::hidden('country_code', $country_code) }}//<------shows 1-US instead of 1
    {{ Form::hidden('phone_number', $phone_number) }}
    {{ Form::hidden('type', $pin_notification_type) }}
    {{ Form::text('pin_code', null,['placeholder' => 'Pin Code'])}}<br><br>
    Enter a 4 digit pin you received by phone.
    <br>
    <br>
    {{ Form::submit('Verify',['name'=>'validate'])}}

{{ Form::close() }}

因此,如果我在我的控制器中将 $country_code 设置为“1”,它将显示 我们向 1 5555555 发送了一条短信。您应该会在几秒钟内收到。 但是,如果我在我的隐藏表单上执行检查元素,它会显示 1-US。我已尝试 php artisan view:clearphp artisan clear-compiled,但问题仍然存在。

我也试过硬编码一个值 {{ Form::hidden('country_code', 'asdf') }} 但我没有看到变化。我尝试添加测试 {{ Form::hidden('country_code1', 'asdf') }} 并查看更新。

我还为我的隐藏字段将 country_code 重命名为 country_code111,它显示了正确的值 1。我认为这是一个缓存问题,但正如我提到的,我试过 php artisan cache:clear 问题依然存在。

由于您使用的是 Laravel 5.4,我假设您使用的是 Laravel 集合中的 Form,因为它们在 5.x 中从基线 Laravel 中删除].

LaravelCollective Forms 将覆盖您提供给输入的值(如果它存在于请求数据或旧发布数据(old() 函数)中)。我怀疑你就是这种情况。

您可以看到此行为实现 here

要解决这个问题,您有几种选择:

  1. 更改输入页面的请求参数的名称(如果您可以控制它)
  2. 将您的字段名称重命名为不冲突的名称
  3. 不要使用 Form:: 生成表单,只需使用经典 html/Blade 自动创建隐藏输入

就我个人而言,我会推荐#3,因为这样您就可以完全控制您的代码。

<input type="hidden" name="country_code" value="{{ $country_code }}"/>