【发布时间】:2018-05-25 07:43:01
【问题描述】:
我有一个帖子和一个表格要回复。当我提交表单时,网址是“http://forum.dev/threads/POST?_token=FIjEkUuNOyFfx8abaiIMEbep2VO1SXYk2b6hqzfT&body=something”
我的看法是:
@if (auth()->check())
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form action="POST" action="{{ $thread->path() . '/replies' }}">
{{ csrf_field() }}
<div class="form-group">
<textarea name="body" id="body" class="form-control" placeholder="Have something to say?" rows="5"></textarea>
</div>
<button type="submit" class="btn btn-default">Post</button>
</form>
</div>
</div>
@endif
我的控制器是:
public function store(Thread $thread)
{
$thread->addReply([
'body' => request('body'),
'user_id' => auth()->id()
]);
return back();
}
我的线程模型是:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Thread extends Model
{
protected $guarded = [];
public function path()
{
return '/threads/' . $this->id;
}
public function replies()
{
return $this->hasMany(Reply::class);
}
public function creator()
{
return $this->belongsTo(User::class, 'user_id');
}
public function addReply($reply)
{
$this->replies()->create($reply);
}
}
如果我忘记了什么,请告诉我! 任何帮助将不胜感激! 非常感谢!
【问题讨论】:
-
添加您的路线定义。您使用的是隐式还是显式模型绑定?您是否在模型上设置了正确的路由键名称?您在构建 URL 时传递了
id,但您尝试粘贴的 URL 似乎没有使用id.. 它也是通过方法 GET 而不是 POST 提交的,它似乎基于您的 URL -
<form action="POST" action="{{ $thread->path() . '/replies' }}">- 你指定了两次action,但实际上是指method。由于 HTML 解析和错误处理规则,浏览器忽略了相同属性的第二次出现。因此,请求被发送到http://forum.dev/threads/POST,并在查询字符串中附加了表单数据,因为方法设置为GET,默认为misssignmethod属性。呃。 :) -
是的,谢谢@CBroe 我完全错过了!