【问题标题】:Laravel Error: Undefined Variable - rating_pointsLaravel 错误:未定义的变量 - rating_points
【发布时间】:2019-12-31 20:07:05
【问题描述】:

我正在使用 Laravel-5.8 开发一个 Web 应用程序。在项目中,我尝试使用基于条件的选择选项更改来动态添加输入字段。最初这是成功的,但后来我遇到了错误。

控制器

public $rating_points = [
    "1" => "Three-Star-Rating",
    "2" => "Four-Star-Rating",
    "3" => "Five-Star-Rating",
    "4" => "Six-Star-Rating",
    "5" => "Seven-Star-Rating",
];

public function create()
{
    return view('appraisal.ratings.create')->with('rating_points', $this->rating_points);
}

public function store(StoreRatingRequest $request)
{
    $input = Input::all();
    for ($idx = 0; $idx < count(Input::get('id')); $idx++)
    {
        $rating = new AppraisalRating;
        $rating->rating_point           =       $input['rating_point'][$idx];
        $rating->rating_type            =       $input['rating_type'][$idx];
        $rating->rating_value           =       $input['rating_value'][$idx];
        $rating->rating_description     =       $input['rating_description'][$idx];
        $rating->save();
    }

    Session::flash('success', 'Appraisal Rating is created successfully');
        return redirect()->route('appraisal.ratings.index');
    }

查看:create.blade

<div class="card-body">
    <form  action="{{route('appraisal.ratings.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
           {{csrf_field()}}
                        <div class="form-body">
                            <div class="row">
                                <div class="col-md-12">
                                    <div class="form-group row">
                                        <label for="rating-point" class="col-4 col-form-label"> Rating Point<span style="color:red;">*</span></label>
                                        <div class="col-md-6 controls">
                                            <select id='rating-point' class="form-control select2" data-placeholder="Choose Rating Value" tabindex="1" name="rating_point[]">
                                                <option value="">Select Rating Point</option>
                                                @foreach($rating_points as $k => $rating_point)
                                                    <option value="{{$k}}" @if(old("rating_point") == "$k") selected @endif>{{$rating_point}}</option>
                                                @endforeach
                                            </select>
                                        </div>
                                    </div>
                                </div>  
                            </div>

                        <div class="row" id="rating-data"></div>
                    </div>
          
            <div id="rating-button" style="display: none;">
                &nbsp;&nbsp;&nbsp;<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
                <button type="button" onclick="window.location.href='{{route('appraisal.ratings.index')}}'" class="btn btn-default">Cancel</button>
            </div>
        </form>
    </div> 
    @endsection

    @section('javascript')
    <!-- jQuery -->
    <script src="{{ asset('theme/adminlte3/plugins/jquery/jquery.min.js') }}"></script>
    <!-- jQuery UI 1.11.4 -->
    <script src="{{ asset('theme/adminlte3/plugins/jquery-ui/jquery-ui.min.js') }}"></script>


    <script>
    $(document).ready(function($){
    $('#rating-point').on('change', function() {
     $('#rating-data').html('');

      if ( this.value == '1')
      {
        var numInputs = '3';
         for(var i=0; i < numInputs; i++)
         {
             var j = i*1+1;
             var $section =  $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
             $('#rating-data').append($section);
         }           
        $("#rating-button").show();
      }
      else if ( this.value == '2')
      {
        var numInputs = '4';
         for(var i=0; i < numInputs; i++)
         {
             var j = i*1+1;
             var $section =  $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
             $('#rating-data').append($section);
         } 
        $("#rating-button").show();
      }
      else if ( this.value == '3')
      {
        var numInputs = '5';
         for(var i=0; i < numInputs; i++)
         {
             var j = i*1+1;
             var $section =  $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
             $('#rating-data').append($section);
         } 
        $("#rating-button").show();
      }
      else if ( this.value == '4')
      {
        var numInputs = '6';
         for(var i=0; i < numInputs; i++)
         {
             var j = i*1+1;
             var $section =  $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
             $('#rating-data').append($section);
         } 
        $("#rating-button").show();
      }
      else if ( this.value == '5')
      {
        var numInputs = '7';
         for(var i=0; i < numInputs; i++)
         {
             var j = i*1+1;
             var $section =  $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input  type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
             $('#rating-data').append($section);
         } 
        $("#rating-button").show();
      }
      else
      {
        $("#rating-button").hide();
      }
     });
    });
   </script>

   @stop

我希望当页面加载时我应该只看到选择选项下拉列表,当我选择更改时我应该看到类似上图的内容,然后保存到数据库中。

最初页面正在加载,但是当我向控制器添加一些代码时,我收到了这个错误:

错误异常 (E_ERROR) 未定义变量:rating_points(查看:C:\xampp\htdocs\appraisal\resources\views\appraisal\ratings\create.blade.php)

页面没有再次加载。

我该如何解决。

谢谢

【问题讨论】:

  • 这里的代码很多,你的问题有点不清楚。 when I added some code ... I got this error - 什么代码? when I select on change - 如果页面没有加载,你还没有看到这个,对吧?如果页面没有加载,那么你的store() 方法,可能你的大部分(全部?)JS 与这个直接问题无关?一次解决一个问题。如果您编辑它并删除所有这些,您可以使这个问题更容易阅读/理解/回答。尝试创建一个minimal, complete, and verifiable example
  • 这是我在控制器中添加的将其保存为数组的代码: for ($idx = 0; $idx
  • 你在哪一行得到错误?
  • @mdexp - 视图中的第 81 行。这是哪个; @foreach($rating_points as $k => $rating_point)

标签: jquery laravel


【解决方案1】:

请更改语法

  return view('appraisal.ratings.create')->with('rating_points', $this->rating_points);

  return view('appraisal.ratings.create')->with(['rating_points'=>$this->rating_points]);

【讨论】:

  • kelvin kantaria,当我按照您的建议进行更改时,错误仍然存​​在。
  • The docs show OP's code is correct,不需要使用数组。
  • @kelvinkantaria 请不要建议张贴截图,这不是 imgur。
【解决方案2】:

谢谢大家。 我观察到它仍在引用我使用的旧控制器。我删除了它并运行作曲家更新。 问题解决了。

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2016-03-30
    • 2014-12-09
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    相关资源
    最近更新 更多