Laravel 5.7 使用相同的 url 操作在 blade 模板中使用 @yield 进行插入和更新
Laravel 5.7 using same url action for insert and update with @yield in blade template
我正在使用 laravel 5.7 并且我正在使用一种表格进行插入和更新。在表单操作中,我想使用 @yield() for laravel 路由来获取更新的 id。一切都很好,但我不能使用 @yield() 方法。这是我的代码,问题只出在表单的操作上。
<form class="form-horizontal" action="{{ url('/todo/@yield('editId')') }}" method="post">
{{csrf_field()}}
@section('editMethod')
@show
<fieldset>
<div class="form-group">
<div class="col-lg-10">
<input type="text" name="title" placeholder="Title" value="@yield('editTitle')" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-lg-10">
<textarea class="form-control" placeholder="Body" name="body" rows="5" id="textarea">@yield('editBody')</textarea>
<br>
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</fieldset>
</form>
我也用单引号和双引号检查过。
action="/todo/@yield('editid')"
当我使用简单的此方法时,提交后将我重定向到本地主机,但未找到错误页面。在 laravel 5.4 它有效。但不在 laravel 5.7。任何帮助将不胜感激 谢谢
这是我使用@section 和@yield
的edit.blade.php
@extends('Todo.create')
@section('editId',$item->id)
@section('editTitle',$item->title)
@section('editBody',$item->body)
@section('editMethod')
{{ method_field("PUT") }}
@endsection
控制器存储编辑和更新方法是
public function store(Request $request)
{
$todo = new todo;
$this->validate($request,[
'body'=>'required',
'title'=>'required|unique:todos',
]);
$todo->body = $request->body;
$todo->title = $request->title;
$todo->save();
return redirect("todo");
}
public function edit($id)
{
$item = todo::find($id);
return view("Todo.edit",compact('item'));
}
public function update(Request $request, $id)
{
$todo = todo::find($id);
$this->validate($request,[
'body'=>'required',
'title'=>'required',
]);
$todo->body = $request->body;
$todo->title = $request->title;
$todo->save();
return redirect("/todo");
}
正如 apokryfos 已经提到的那样 - @yield 被认为可以使您的模板更容易重用。
如果你只是想确定(例如)之后应该调用哪个动作你最好做这样的事情:
@extends('Todo.create')
<form class="form-horizontal" action="/todo/{{ isset($item) ? $item->id : '' }}" method="post">
@if( ! isset($item))
{{ method_field("PUT") }}
@else
{{ method_field("PATCH") }}
{{csrf_field()}}
<fieldset>
<div class="form-group">
<div class="col-lg-10">
<input type="text" name="title" placeholder="Title" value="{{ isset($item) ? $item->title : '' }}" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-lg-10">
<textarea class="form-control" placeholder="Body" name="body" rows="5" id="textarea">{{ isset($item) ? $item->body : '' }}</textarea>
<br>
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</fieldset>
</form>
此外,我记得方法字段应该始终排在第一位,以确保它被正确识别。此外,我认为您不需要 url() 来生成 url 。
不需要一秒钟 blade。只需将变量直接注入模板,并确保在访问它们之前设置它们。我没有尝试过,但我认为它应该有效。
要回答您需要做的 OP 实际问题
@section('editId', "/$item->id") or @section('editId', '/'.$item->id')
{{ url('/todo') }}@yeild('editId')
但更好做
{{ url('/todo/'.(isset($item) ? $item->id : '')) }}
或 PHP >= 7
{{ url('/todo/'.($item->id ?? '')) }}
我正在使用 laravel 5.7 并且我正在使用一种表格进行插入和更新。在表单操作中,我想使用 @yield() for laravel 路由来获取更新的 id。一切都很好,但我不能使用 @yield() 方法。这是我的代码,问题只出在表单的操作上。
<form class="form-horizontal" action="{{ url('/todo/@yield('editId')') }}" method="post">
{{csrf_field()}}
@section('editMethod')
@show
<fieldset>
<div class="form-group">
<div class="col-lg-10">
<input type="text" name="title" placeholder="Title" value="@yield('editTitle')" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-lg-10">
<textarea class="form-control" placeholder="Body" name="body" rows="5" id="textarea">@yield('editBody')</textarea>
<br>
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</fieldset>
</form>
我也用单引号和双引号检查过。
action="/todo/@yield('editid')"
当我使用简单的此方法时,提交后将我重定向到本地主机,但未找到错误页面。在 laravel 5.4 它有效。但不在 laravel 5.7。任何帮助将不胜感激 谢谢
这是我使用@section 和@yield
的edit.blade.php @extends('Todo.create')
@section('editId',$item->id)
@section('editTitle',$item->title)
@section('editBody',$item->body)
@section('editMethod')
{{ method_field("PUT") }}
@endsection
控制器存储编辑和更新方法是
public function store(Request $request)
{
$todo = new todo;
$this->validate($request,[
'body'=>'required',
'title'=>'required|unique:todos',
]);
$todo->body = $request->body;
$todo->title = $request->title;
$todo->save();
return redirect("todo");
}
public function edit($id)
{
$item = todo::find($id);
return view("Todo.edit",compact('item'));
}
public function update(Request $request, $id)
{
$todo = todo::find($id);
$this->validate($request,[
'body'=>'required',
'title'=>'required',
]);
$todo->body = $request->body;
$todo->title = $request->title;
$todo->save();
return redirect("/todo");
}
正如 apokryfos 已经提到的那样 - @yield 被认为可以使您的模板更容易重用。
如果你只是想确定(例如)之后应该调用哪个动作你最好做这样的事情:
@extends('Todo.create')
<form class="form-horizontal" action="/todo/{{ isset($item) ? $item->id : '' }}" method="post">
@if( ! isset($item))
{{ method_field("PUT") }}
@else
{{ method_field("PATCH") }}
{{csrf_field()}}
<fieldset>
<div class="form-group">
<div class="col-lg-10">
<input type="text" name="title" placeholder="Title" value="{{ isset($item) ? $item->title : '' }}" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-lg-10">
<textarea class="form-control" placeholder="Body" name="body" rows="5" id="textarea">{{ isset($item) ? $item->body : '' }}</textarea>
<br>
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</fieldset>
</form>
此外,我记得方法字段应该始终排在第一位,以确保它被正确识别。此外,我认为您不需要 url() 来生成 url 。 不需要一秒钟 blade。只需将变量直接注入模板,并确保在访问它们之前设置它们。我没有尝试过,但我认为它应该有效。
要回答您需要做的 OP 实际问题
@section('editId', "/$item->id") or @section('editId', '/'.$item->id')
{{ url('/todo') }}@yeild('editId')
但更好做
{{ url('/todo/'.(isset($item) ? $item->id : '')) }}
或 PHP >= 7
{{ url('/todo/'.($item->id ?? '')) }}