【问题标题】:Laravel error: View::__toString() must not throw an exceptionLaravel 错误:View::__toString() 不能抛出异常
【发布时间】:2021-08-03 19:31:00
【问题描述】:

我在从 URL 循环获取数据时遇到问题。 我的数组在 var dump 之后看起来像:

array(5) {
[0]=>
array(5) {
  ["sku"]=>
  string(9) "AH1172164"
  ["name"]=>
  string(21) "dasdas"
  ["url"]=>
  string(42) "21321312"
  ["price"]=>
  string(6) "866.00"
  ["stocks"]=>
  array(1) {
    [0]=>
    array(3) {
      ["partner"]=>
      string(6) "321312"
      ["qty"]=>
      string(1) "1"
      ["spotted"]=>
      string(14) "1 month "
    }
  }
}

我在刀片文件中循环数据的代码:

@php 
    $d=$_GET['Api'];
    var_dump($d);

    foreach($d as $value)
    {
        echo $value;
    
    }
@endphp

当我使用 var_dump 时,数据被正确列出,但是当我想循环变量 $d 时,我得到了这个错误:

Method Illuminate\View\View::__toString() 一定不能抛出异常,捕获到 Facade\Ignition\Exceptions\ViewException: Array to string conversion (View: F:\xampp\htdocs\semafor-master\resources\views \平台\工具\

我有 API.. 和我的控制器:

public function gen(Request $request)
{
    // Some queries, and loops to fill $data variable..
    return \Redirect::route('platform.tools.gen', ['Api'=>$data]);
    
}

我不能使用返回视图,我必须使用返回重定向,因为在 API REQUEST 之后我想重定向到这条路线。 gen 视图是 Orchid 管理面板屏幕。 可能是什么问题?

提前致谢。

【问题讨论】:

  • 您的数据应该在gen 页面中名为$Api 的变量中可用。在刀片文件中运行{{ dd($Api) }} this 会发生什么?
  • @thursday_dan 我遇到了同样的错误..
  • 尝试使用$d=json_decode($_GET['Api']);在循环之前解码您的数据
  • @luca_999 同样的错误.. :/
  • @luca_999 我的数组循环有问题...我编辑了问题,请检查!

标签: laravel view routes


【解决方案1】:

部分答案是堆栈中的某个地方调用了一个神奇的__toString() 方法。只有在 PHP 7.4 及更高版本中才允许在其中调用异常。尝试将你的行为包装在一个通用的 try/catch 中,并让它从它试图抛出的异常中转储消息。您现在看到的消息只是另一个问题的症状。

【讨论】:

  • 我检查了,错误是:数组到字符串的转换
  • 这是我的数组:array(5) { [0]=> array(5) { ["sku"]=> string(9) "AH1172164" ["name"]=> string (21) "dasdas" ["url"]=> 字符串(42) "21321312" ["price"]=> 字符串(6) "866.00" ["stocks"]=> 数组(1) { [0]= > array(3) { ["partner"]=> string(6) "321312" ["qty"]=> string(1) "1" ["spotted"]=> string(14) "1 month" } } }
  • 可能是您的“股票”价值。看起来您正在尝试回显嵌套数组,它抛出了一个错误,然后它抛出了一个关于它无法抛出第一个错误的不同错误。
  • 是的...如何循环整个数组?
  • 只需添加一些 logit 来抢占您的 echo 语句检查 if (is_array($value)) { ...。顺便说一句,您可能需要考虑在模板中使用 Blade Directives 而不是原始 Php,在这种情况下它会更简洁一些。
【解决方案2】:

看起来你有一个数组变量数组,所以你应该在打印之前将你的值编码为一个字符串:

@php 
    $d=$_GET['Api'];

    foreach($d as $value)
    {
        echo json_encode($value);
    
    }
@endphp

【讨论】:

  • 谢谢!这是一个很好的解决方案,但是当我打印时,数据在括号中:像这样的“AH1008274”.. 为什么?
  • 因为您将数组编码为标准 JSON 格式,如果您想访问或打印 $value 属性,您应该直接使用 $value["sku"] 引用它们,...
  • 是的,我这样打印.. $value['sku'];但还是有引号
猜你喜欢
  • 2014-12-19
  • 2016-07-13
  • 2015-04-04
  • 2016-09-23
  • 2014-04-20
  • 1970-01-01
  • 2014-11-18
  • 2015-04-14
  • 2017-09-09
相关资源
最近更新 更多