【问题标题】:laravel 5.4 showing blank viewlaravel 5.4 显示空白视图
【发布时间】:2017-06-11 14:35:51
【问题描述】:

我正在将数据从控制器发送到视图(这是一个单页 Web 应用程序),但视图的输入字段没有显示任何内容。当我使用 console.log 时,我得到了这个(附上截图)。我的问题是如何在输入视野中显示这些数据?

控制器

public function edit(Request $request){
        $results = Student::where('id', '=', $request->id)->get();
        return $results;
    }

查看

<form class="form_edit" action="" method="post" enctype="multipart/form-data">
        {{csrf_field()}}
        @if(isset($results))
        @foreach ($results as $result)
            <input type="hidden" id="id">
            <input type="text" class="form-control" name="grn" value="{{$result->grn}}">
            <input type="text" class="form-control" name="first_name" id="addItem" value="{{$result->first_name}}">
            <input type="text" class="form-control" name="last_name" value="{{$result->last_name}}">
            <input type="button" class="btn btn-danger" id="btn_delete" value="Delete">
            <input type="reset" class="btn btn-default" id="btn_close" value="Cancel">
            <input type="button" class="btn btn-primary" id="btn_update" value="Update">
        @endforeach
        @endif
    </form>

【问题讨论】:

  • 返回视图('your_view_folder.your_view_page', $results);用此行替换您的退货
  • 我想你忘了返回视图
  • 当我尝试返回视图时('your_view_folder.your_view_page', $results);然后它给了我这个错误。未定义变量:students(查看:D:\xampp\htdocs\sms1\resources\views\students.blade.php)。

标签: php laravel view controller laravel-5.4


【解决方案1】:

你需要像这样传递数据在 laravel 中查看

public function edit(Request $request){
        $results = Student::where('id', '=', $request->id)->get();
        return view('your_view_folder.your_view_page', ["results" => $results]);
    }

注意:您没有加载视图页面

【讨论】:

  • 应用了你的建议,它给出了这个错误。未定义变量:students(查看:D:\xampp\htdocs\sms1\resources\views\students.blade.php)
  • 你加载你的学生模式了吗? @Gohar
  • @JYoThI 你需要在视图中传递数组
  • 是的,模型已加载到控制器中,因为它也在添加和删除学生。只有编辑有问题。
  • 你的模特是学生还是学生? @AjayDeepakKumar
【解决方案2】:

要回答您的具体问题:要将数据传递到视图中,您必须 return 视图,正如 @JYoThl 非常正确地建议的那样。但是数据应该作为带有键/值对的数组传入,否则会出错。 (见Laravel 5.4 docs。)

因此,例如,如果包含表单元素的视图文件被命名为“formView.blade.php”并且它位于 resources/views/ 目录中,那么您将修改控制器方法如下:

public function edit(Request $request)
{
    $results = Student::where('id', '=', $request->id)->get();
    return view('formView', ['results' => $results]);
}

或者……

public function edit(Request $request)
{
    $results = Student::where('id', '=', $request->id)->get();
    return view('formView')->with('results', $results);
}

$results 现在在您的视图中可用。

【讨论】:

  • 应用了你的建议,它给出了这个错误。未定义变量:students(查看:D:\xampp\htdocs\sms1\resources\views\students.blade.php)
  • 两个问题: 1. 你在 D:\xampp\htdocs\sms1\resources\views\students.blade.php 中使用变量 $students 吗? (如果是这样,我在上面的代码块中看不到它。您可以在视图中使用 $results,或者,例如,$results[0]->last_name,但除非您添加一些我看不到的额外代码在代码块中,您不允许使用 $students 变量。) 2. 您使用的模型名为“Student”,而不是“students”...但可能没有正确注册/别名?
  • 1.这个错误实际上是对视图参数说未定义的变量,即学生(students.blade.php)。我没有使用学生作为变量。 2. 我认为 Model Student 工作正常,因为它正在添加新学生和删除学生。
  • 根据我的经验,该错误应该意味着您在视图中的某处使用了变量$students。检查整个嵌套视图结构:模板您的视图@extends; @yield 您的视图使用的部分;也许视图中的@include 部分已经或期望传递给它的“学生”参数?此外,您可以尝试将控制器方法中的 $results 重命名为 $students,将 return 替换为 return view('formView', ['students' =&gt; $students]);,将视图中的所有变量 $results 更改为 $students,然后查看错误是否消失。希望对您有所帮助。
  • 非常抱歉,伙计们。有一个变量 $students。现在未定义的变量问题已解决。现在控制器是这样的。 $results = Student::where('id', '=', $request->id)->get();返回视图('学生',紧凑('结果'));但是刚刚通过检查元素看到它并没有进入@if(isset($results))。另一方面,Ajax 的 console.log(data);正在控制台中打印整个视图的 html。我不明白这里出了什么问题。
【解决方案3】:

我可以推荐几件事。首先,您正在按 id 搜索学生,我认为它应该返回一个学生,它是学生的主键。因此你可能想使用 Student::find(); .此外,您可能希望构建查询以在模型或抽象基础模型上进行搜索,您可以在其中创建扩展它的所有模型都可以使用的基本搜索。例如:

abstract class BaseModel extends Eloquent{

protected $guarded = [
    'id'
];

public $primaryKey = 'id';

public $incrementing = false;

public function __construct($attributes = array())  {
    parent::__construct($attributes); // Eloquent
    $this->id = uniqid();

    return $this

}


public static function getObjectById($id){
    $class = get_called_class();
    $results = $class::find($id);
    return $results;

}

public static function getAllObjects(){
    $class = get_called_class();
    return $class::all();
}

}

那么你的学生班级:

 class Student extends Model

{

protected $fillable = [
    'name'
];
protected $table = "student";

public $incrementing = false;

/**
 * Student constructor.
 * @param array $attributes
 */
public function __construct($attributes = array())  {
    parent::__construct($attributes); // Eloquent
    // Your construct code.
    // TODO split string stuff to get the rest of the attributes.

    return $this;

}

}

然后你的控制器:

    class StudentController extends Controller{
        public function getStudent(Request $request){
            $results = Student::getObjectById($request->id);
            return response()->json([
                 'results' => $results
            ]);

        }
    }

你的路线/web.php:

    Route::get('/student', 'EnumController@getStudent');

我喜欢使用自己的前端,所以我可以使用 ajax 来完成请求:

     <body>
          <div class="container">
               <div id="student-list" class="well"></div>
          </div>
     </body>

     <script>
         $.ajax({
              type: "GET",
              url: '/student',
              success: function( data ) {
                  results = data.results;

                  console.log(results);

                  $.each(results, function(key, value){
                         $('#student-list').append('<div >' + value + '</option>');
                   });


               }
           });     
     </script>

【讨论】:

  • 这里有一些关于这个问题的合理逻辑,但是,Student::find()-&gt;first(); 将不起作用。 find() 不返回集合,因此您不能在其上调用-&gt;first(),因为-&gt;first()Illuminate\Support\Collection 的一部分。相反,find 返回一个 Iluminate\Database\Eloquent\Model 的实例,它没有 -&gt;first()
  • 谢谢亚历克斯,我会试试这个并回复你。
  • 对,我想我不确定他是否按主键搜索。所以我不确定他是想返回一个集合还是一个对象。我将对其进行编辑以删除 ->first();
猜你喜欢
  • 2017-07-16
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多