Php 如何检查第二种方法是否失败?

Php 如何检查第二种方法是否失败?,php,laravel,Php,Laravel,我在索引中有这两种方法检查请求是否被批准,并检查是否有足够的数量,如果没有返回消息 代码 public function index(Order $order,Request $request) { if($request->status == 'approved'){ $this->check($order); } $this->updateOrder($order,$request); return redirect()-

我在
索引中有这两种方法
检查请求是否被批准,并检查是否有足够的数量,如果没有返回消息

代码

public function index(Order $order,Request $request)
{
    if($request->status == 'approved'){
        $this->check($order);
    }

    $this->updateOrder($order,$request);

    return redirect()->back()
            ->with('success',trans('site.message_updated'));
}


protected function check($order){
    foreach($order->products as $product){
        if ($product->doesNotHaveEnoughQuantity($product->pivot->quantity)) {
            return redirect()->back()
                    ->with('error',trans('site.larger_than_qty_in_store'));
        }
        $this->updateProductQty($product);
    }
}
当我确定状态
已批准时
状态为更新,即使数量不足

简而言之,
检查中的redirect back()不会终止页面并停止

当我调用另一个方法时,如何重定向回原来的位置?

试试以下方法:

private $productWithError;

public function index(Order $order,Request $request)
{
    if($request->status == 'approved'){
        if( ! $this->check($order) ) {
            return redirect()->back()
                    ->with('error', $this->productWithError.' '.trans('site.larger_than_qty_in_store'));
        }
    }

    $this->updateOrder($order,$request);

    return redirect()->back()
            ->with('success',trans('site.message_updated'));
}


protected function check($order){
    foreach($order->products as $product){
        if ($product->doesNotHaveEnoughQuantity($product->pivot->quantity)) {
            $this->productWithError = $product->name;
            return false;
        }
        $this->updateProductQty($product);
    }
    return true;
}

您需要确保
方法没有达到预期效果。@user3532758代码中没有错误,当我只是将foreach in check方法移动到index one时,所有东西都工作得很好,但是当我将foreach放在单独的方法中时返回的问题没有意义,至少对我来说不是。如果该方法返回true,它应该命中return语句。在
return redirect()…
之前,您可以在
if
中执行
dd(“inside if”)
吗。看看它是否得到了dded。@user3532758是的,我做了,我得到了dd结果(也许你弄错了,代码工作了,重定向消息显示了,但是返回并没有杀死页面,其他方法,如updateOrder也工作了,我不想得到它,因为它重定向了为什么其他方法工作!)这是我的问题如果你得到结果,我肯定弄错了。可能从方法中执行
返回false
。返回updateQty或在函数末尾返回true。在索引
中,如果(!$this->check($order))
执行返回操作,因为可能还需要从索引函数返回check函数..谢谢!有没有更好的方法让控制器更易于阅读?我只是问一下,因为我在错误消息中有这样的产品名称(->with('error'),('$product->name')).trans('site.bighter_-than_-qty_-in_-store');)。你的代码完美的工作,但我必须删除产品的名称!哦,您可能有一个calss变量来包含给出错误的产品名称。但是,这可能不是最干净的方式。我不是干净代码方面的专家,但我会仔细研究一下这些最佳实践。我已经更新了答案。