Laravel - ErrorException 未定义索引:名字
Laravel - ErrorException Undefined index: firstname
支持你们,我是 Laravel 的新手,我正在尝试通过添加、修改、删除作者和 books.So 制作 crud 操作示例,我的作者 crud 工作正常,但是当我尝试通过获取创建的作者来创建一本书我收到此错误:
ErrorException (E_NOTICE)
"Undefined index: firstname"
这是我的代码:
我的 Authors.php
class Authors extends Model
{
protected $table ='authors';
protected $fillable = ['firstname','lastname'];
public function book()
{
return $this->hasMany('Books','author');
}
}
我的Books.php:
class Books extends Model
{
protected $table = 'books';
protected $fillable = ['title'];
public function author()
{
return $this->belongsTo('App\Authors');
}
}
我的BooksController.php(实际得到异常的地方):
public function create()
{
return view('books.index');
}
public function store(Request $request)
{
$inputs = $request->all();
$book = new Books();
$book->title = $inputs['title'];
$book->author()->attach($inputs['firstname']);
$book->author()->attach($inputs['lastname']);
$book->save();
return redirect('/books');
}
我的index.php:
@section('content')
<div class="container">
<form method="post" action="{{url('books')}}">
<div class="form-group row">
{{csrf_field()}}
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Title</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="title" name="title">
</div>
</div>
<div class="form-group row">
{{csrf_field()}}
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Author</label>
<div class="col-sm-10">
<select id="author" name="author">
<option value="Z">Select an author</option>
@foreach ($authors as $author)
<option value="{{$author['id']}}">{{$author['firstname']}} {{$author['lastname']}}</option>
@endforeach
</select>
</div>
</div>
<input type="submit" value="Create" />
</form>
</div>
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Author</th>
</tr>
</thead>
<tbody>
@foreach($books as $book)
<tr>
<td>{{$book['id']}}</td>
<td>{{$book->$author['firstname']}} {{$book->$author['lastname']}}</td>
<td><a href="{{action('BooksController@edit', $book['id'])}}" class="btn btn-warning">Edit</a></td>
<td>
<form action="{{action('BooksController@destroy', $book['id'])}}" method="post">
{{csrf_field()}}
<input name="_method" type="hidden" value="DELETE">
<button class="btn btn-danger" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
所以,我不知道为什么我的控制器存储中会出现此异常...提前致谢!
这是因为您的表单中没有任何输入字段。表单必须包含名称为 firstname
的输入字段。
您可以通过转储 $inputs
字段来检查这一点。例如 dd($inputs)
。我确信在你的控制器中这个变量不包含任何名为 firstname
的索引,因为你的表单没有任何名为 firstname
的输入文件。
这帮我修好了。
composer update
在某些情况下,当您的 POST 来自使用您的 PHP API 的人时,最好的方法是使用 isset coalesce。
例如
$name = isset($_GET['name']) ? $_GET['name'] : '';
或最新的 PHP 版本(也 laravel)
$name = $_GET['name'] ?? '';
尽情享受吧!
支持你们,我是 Laravel 的新手,我正在尝试通过添加、修改、删除作者和 books.So 制作 crud 操作示例,我的作者 crud 工作正常,但是当我尝试通过获取创建的作者来创建一本书我收到此错误:
ErrorException (E_NOTICE)
"Undefined index: firstname"
这是我的代码: 我的 Authors.php
class Authors extends Model
{
protected $table ='authors';
protected $fillable = ['firstname','lastname'];
public function book()
{
return $this->hasMany('Books','author');
}
}
我的Books.php:
class Books extends Model
{
protected $table = 'books';
protected $fillable = ['title'];
public function author()
{
return $this->belongsTo('App\Authors');
}
}
我的BooksController.php(实际得到异常的地方):
public function create()
{
return view('books.index');
}
public function store(Request $request)
{
$inputs = $request->all();
$book = new Books();
$book->title = $inputs['title'];
$book->author()->attach($inputs['firstname']);
$book->author()->attach($inputs['lastname']);
$book->save();
return redirect('/books');
}
我的index.php:
@section('content')
<div class="container">
<form method="post" action="{{url('books')}}">
<div class="form-group row">
{{csrf_field()}}
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Title</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="title" name="title">
</div>
</div>
<div class="form-group row">
{{csrf_field()}}
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Author</label>
<div class="col-sm-10">
<select id="author" name="author">
<option value="Z">Select an author</option>
@foreach ($authors as $author)
<option value="{{$author['id']}}">{{$author['firstname']}} {{$author['lastname']}}</option>
@endforeach
</select>
</div>
</div>
<input type="submit" value="Create" />
</form>
</div>
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Author</th>
</tr>
</thead>
<tbody>
@foreach($books as $book)
<tr>
<td>{{$book['id']}}</td>
<td>{{$book->$author['firstname']}} {{$book->$author['lastname']}}</td>
<td><a href="{{action('BooksController@edit', $book['id'])}}" class="btn btn-warning">Edit</a></td>
<td>
<form action="{{action('BooksController@destroy', $book['id'])}}" method="post">
{{csrf_field()}}
<input name="_method" type="hidden" value="DELETE">
<button class="btn btn-danger" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
所以,我不知道为什么我的控制器存储中会出现此异常...提前致谢!
这是因为您的表单中没有任何输入字段。表单必须包含名称为 firstname
的输入字段。
您可以通过转储 $inputs
字段来检查这一点。例如 dd($inputs)
。我确信在你的控制器中这个变量不包含任何名为 firstname
的索引,因为你的表单没有任何名为 firstname
的输入文件。
这帮我修好了。
composer update
在某些情况下,当您的 POST 来自使用您的 PHP API 的人时,最好的方法是使用 isset coalesce。
例如
$name = isset($_GET['name']) ? $_GET['name'] : '';
或最新的 PHP 版本(也 laravel)
$name = $_GET['name'] ?? '';
尽情享受吧!