【问题标题】:Laravel: method doesn't work without a unused parameterLaravel:没有未使用的参数,方法不起作用
【发布时间】:2017-04-05 22:49:37
【问题描述】:

我有一个方法remove(),它有参数$item,但它没有在里面使用。 PhpStorm 将其显示为灰色,并说参数 $item 没有在任何地方使用。但如果我删除它,我会收到此错误:

ErrorException in Cart.php line 51:
Illegal offset type
in Cart.php line 51
at HandleExceptions->handleError('2', 'Illegal offset type', 'C:\wamp64\www\laravel\app\Cart.php', '51', array('id' => object(Product))) in Cart.php line 51
at Cart->remove(object(Product), '1') in ProductController.php line 65
at ProductController->removeFromCart('1')
at call_user_func_array(array(object(ProductController), 'removeFromCart'), array('id' => '1')) in compiled.php line 9399
at Controller->callAction('removeFromCart', array('id' => '1')) in compiled.php line 9426
at ControllerDispatcher->dispatch(object(Route), object(ProductController), 'removeFromCart') in compiled.php line 8484
at Route->runController() in compiled.php line 8465
at Route->run(object(Request)) in compiled.php line 8174

购物车.php:

/**
 * Remove an item from cart
 *
 * @param $item
 * @param $id
 */
public function remove($item, $id)
{
    $this->totalQty -= $this->items[$id]['qty']; // Line 51
    $this->totalPrice -= $this->items[$id]['price'] * $this->items[$id]['qty'];
    unset($this->items[$id]);
}

如果我把它放在那里可以正常工作,但为什么我删除它时就不行?

【问题讨论】:

  • 你在哪里调用函数?您是否对其进行了更新以反映新的方法签名?
  • 某处你仍在传递一个Product 对象作为第一个参数,所以在那一行,当你尝试使用$id 时(记住现在是 first 参数,原为Product 对象,但现在是 $id),$id 是 Product 对象,不能用作索引。见stackoverflow.com/a/2732502/451969

标签: php laravel laravel-5


【解决方案1】:

当您更新方法签名时,您必须更新被调用的该方法的每个实例以反映新参数。在第 65 行的 ProductController 中,它仍然使用旧的方法签名(同时具有项目和 id)。要修复它,请将控制器中的方法调用更新为仅使用 $id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 2015-08-13
    • 2016-04-06
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多