我有一个带有创建,编辑和删除按钮的登录页面,编辑按钮链接到选择(下拉)菜单,我的URL路由是/ events / {number} / edit。
如何将URL写入此格式,因为页面已经加载,然后进行选择。
<div class="col-sm-4">
<form method="get" action="{{ route('events.edit', ['event_id' => '2']) }}">
<label>Event Name</label>
<select name="event_edit" class="form-control form-control-lg">
@foreach($events as $event)
<option>{{$event->event_name}}</option>
@endforeach
</select>
<button type="submit" class="btn btn-primary btn-round">Edit</button>
</form>
</div>
上面的工作,但我必须手动将event_id设置为2,这个将需要javascript吗?
Route::resource('events', 'EventController');
GET|HEAD | events/{event}/edit | events.edit | App\Http\Controllers\EventController@edit | web
我没有可以测试的larvel实例但是简单地说PHP是静态的,所以一旦DOM渲染你就无法用PHP更新输出,即在下拉(或任何元素)改变时将$event->id
放入动作中。如果你愿意,你需要JavaScript。但是,我会选择更直接的方法。
您需要在控制器上创建通用编辑路径,并将选项上的id作为值。
<div class="col-sm-4">
<form method="get" action="{{ route('events.edit') }}">
<label>Event Name</label>
<select name="event_edit" class="form-control form-control-lg">
@foreach($events as $event)
<option value="{{$event->id}}">{{$event->name}}</option>
@endforeach
</select>
</form>
</div>
现在,在提交表单时,您将拥有用户想要编辑的事件的ID。只需使用它即可在控制器中获取事件并呈现该事件的编辑屏幕。如果你想让网址很好地显示为site.com/edit/event/3
那么你可以使用类似的东西
return redirect()->route('route.name', [$param]);
应该重定向到路由url,其中param是id,然后执行获取和显示所有逻辑。
HM。我们需要这里的形式动作吗?这个怎么样:
<div class="col-sm-4">
<form method="get" action="">
<label>Event Name</label>
<select name="event_edit" class="form-control form-control-lg"
onChange="window.location.href='/events/' + this.options[this.selectedIndex].value + '/edit'">
@foreach($events as $event)
<option value="{{$event->id}}">{{$event->name}}</option>
@endforeach
</select>
</form>
</div>