重复尝试后的Laravel表单自动从POST call切换到GET call

重复尝试后的Laravel表单自动从POST call切换到GET call,laravel,Laravel,我有下面的代码。它接受表单输入并将其作为post发送。在模型中搜索输入并返回结果。 以下代码适用于除一个场景外的所有场景 输入满足验证的搜索项。第二次搜索是在没有输入的情况下完成的。这将返回错误 注意:只要从“LocalHost”执行at,空搜索就可以了。在“LocalHost/search/”中完成时,将抛出一个错误 编辑:即使表单方法是post,它也会尝试进行GET调用 错误 HTML 控制器功能 public function search(Request $request) { $re

我有下面的代码。它接受表单输入并将其作为post发送。在模型中搜索输入并返回结果。 以下代码适用于除一个场景外的所有场景

输入满足验证的搜索项。第二次搜索是在没有输入的情况下完成的。这将返回错误

注意:只要从“LocalHost”执行at,空搜索就可以了。在“LocalHost/search/”中完成时,将抛出一个错误

编辑:即使表单方法是post,它也会尝试进行GET调用

错误

HTML

控制器功能

public function search(Request $request)
{

$request->validate([
  'search' => 'required|min:2'
]);

$term = $request->input('search');

$products = Product::search($term)->get();
return view('products.index', compact('products'));

}
模型范围

public function scopeSearch($query, $term)
{
  return $query->where('name', $term);
}

它可能正在重定向到
/search
,而您没有相应的URL获取路径

我会放弃最小长度要求,可能会在控制器操作中检查长度,并以任何方式返回一些内容。即使用户的输入不足,他们也希望得到反馈,但这只是用户体验讨论


如果从请求中删除
min:2
,请告诉我是否有效。

我会检查您的
App\Exceptions\Handler
类如何处理ValidationException。我同意SLow Loris的观点,某个地方的某个地方正在跳转GET操作的请求,其中可能存在重定向。也可能是服务器配置错误。我见过这样的情况:Apache重定向到
https
http
请求忽略了过程中的操作和参数。看起来不太可能,因为你的第一篇文章是有效的,但它可能值得一看

如果您知道正在尝试什么路由,可以通过设置一个新的虚拟GET端点来测试这一点,该端点只打印一条调试语句。如果您不知道它是什么路由,并且需要找出,因为
无消息
不是很具有描述性,请向该处理程序类添加类似的内容:

public function render ($request, Exception $e)
{
    if ($e instanceof MethodNotAllowedHttpException) {
        dd($e->getHeaders())
    }
}

如果请求头没有引用正在尝试的路由,您可以临时更改
api/vendor/laravel/framework/src/illumb/Routing/RouteCollection.php::getRouteForMethods()
并强制它在调用
方法notallowed
方法之前打印有关
$request
对象的更多详细信息。如果让我猜的话,
$request->path()
将为您指明正确的方向。

我删除了min:2。没有变化。你认为引导会把它搞砸吗?我改变了一些事情,你是对的,它正在尝试使用GET调用,即使form设置为postreats:public static function fromAction(array$action,$subClass=null){$parameters=Is_string($action['uses'])?static::fromClassMethodString($action['uses']:(新的ReflectionFunction($action['uses'])->getParameters();返回值为空($subClass)?$parameters:array_filter($parameters,function($p)use($subClass){return$p->getClass()&&$p->getClass()->isSubclassOf($subClass);}“Class App\Http\Controllers\Exception不存在”我添加了use App\Http\Controllers\Exception;
public function search(Request $request)
{

$request->validate([
  'search' => 'required|min:2'
]);

$term = $request->input('search');

$products = Product::search($term)->get();
return view('products.index', compact('products'));

}
public function scopeSearch($query, $term)
{
  return $query->where('name', $term);
}
public function render ($request, Exception $e)
{
    if ($e instanceof MethodNotAllowedHttpException) {
        dd($e->getHeaders())
    }
}