显示了PHP-调试,但功能未完全执行,控制台中没有错误

时间:2018-09-18 09:51:48

标签: php http httprequest

我是PHP和HTTP的新手,在尝试调试函数时遇到了一个看起来有些奇怪的问题:

有一个页面显示交易列表(历史交易和未决交易)。该信息显示在表格中,每笔交易都有一行。每笔交易都会显示诸如客户名称,ID,金额,交易联系人,临时联系人,状态等信息。

用户可以通过从“交易联系人”列中的预填充下拉列表中选择一个名称来更新交易联系人。如果要在该下拉列表中添加新名称,则可以单击“临时联系人”列表中单元格中的“编辑”按钮,这将打开一个对话框,其中显示包含“名字”,“姓氏”和“ '电子邮件地址'。添加这些详细信息后,他们可以单击表单上的“添加用户”按钮,新用户将被添加到该单元格的联系人列表中。该单元格中的所有用户将显示在该事务的“交易联系人”单元格的下拉列表中(以及其他一些默认联系人)。

但是,当前存在一个问题,当用户向临时联系人单元格添加新联系人时,尽管该用户随后显示在“交易联系人”下拉列表中,但是当您选择新用户时,会显示错误消息,指出该用户不存在。但是,如果在将联系人添加到“临时联系人”单元格后刷新页面,然后尝试从“交易联系人”下拉列表中选择它,则可以选择它。

我将问题缩小到UserController.php中定义的addAccountUser()函数中的某个位置:

public function addAccountUser( AddAccountUsersRequest $request )
{
  dd('addAccountUser() being called ');
  //dd($request);
  $users = $request->input('users');
  $type = $request->input('type');
  $accountId = $request->input('accountId');
  dd('Value of users: ');
  dd($type);

      // If adding an agent, the new user should be agent, else the created user will be direct
      $userType = $type == 'taxfirm-agent' ? UserType::where('userTypeTag', 'AGENT')->first() : UserType::where('userTypeTag', 'DIRECT')->first();
      $messages = array();
      $hasWarningMessages = false;

      try
      {
          DB::beginTransaction();

        foreach ($users as $userRaw)
        {

              $details = array(
                  'firstName' => $userRaw['firstName'],
                  'lastName'  => $userRaw['lastName'],
                  'email'     => $userRaw['email'],
                  'password'  => uniqid(),
                  'userTypeId' => $userType->userTypeId,
                  'accountId' => (!empty($accountId)) ? $accountId : null
              );
        $propertyValues = array();

        // Adding tax agent
        if ($type == 'taxfirm-agent') {
                  $group = $userRaw['role'];
          $rv = $this->addTaxfirmAgent($details, $group);
        }
        else if($type == 'taxfirm-direct') {
          $rv = $this->addTaxfirmDirectContact($details);
        }
        else {
                  $group = $userRaw['role'];
          $rv = $this->addTaxpayerDirectContact($details, $group);
        }

            DB::commit();

        if ($rv['status'] !== 'SUCCESS') {
            if (!isset($messages[$rv['status']])) {
              $messages[$rv['status']] = array(
                'message' => StatusMessage::getMessage($rv['status']),
                'data' => [],
              );
            }

            $messages[$rv['status']]['data'][] = [$userRaw['email'], ucfirst($userRaw['firstName']), ucfirst($userRaw['lastName'])];

            if (!$hasWarningMessages)
            {
              $hasWarningMessages = true;
            }
        }
        }
    }
      catch(\Exception $e)
      {
          DB::rollback();
    return response()->json(array(
      'success' => false,
        'exceptionCode' => $e->getCode(),
        'exceptionMessage' => $e->getMessage().' - '.$e->getFile().' - '.$e->getLine()
    ), 400);
      }

      // When returning $messages to angular, the array is turned into an object
      // which is not desirable. This is a workaround so that the messages are returned
      // as an array
      $outputMsg = array();
      foreach ($messages as $value) {
          $outputMsg[] = $value;
      }

  return response()->json(array(
    'success' => true,
    'hasWarningMessages' => $hasWarningMessages,
          'result' => $outputMsg,
          'users' => $rv['user']->user,
  ));
}

当前,当我尝试将新用户添加到临时联系人单元以进行交易时,浏览器中显示错误,提示:

  

添加您的用户时发生错误。如果问题仍然存在,请与我们联系。

此时,我可以从浏览器控制台的“网络”->“预览”选项卡中的addAccountUser() being called函数开始看到addAccountUser()调试,但是看不到Value of users:或我添加的$type调试,这表明以下三行之一出现了问题:

$users = $request->input('users');
$type = $request->input('type');
$accountId = $request->input('accountId');

我不完全了解这三行中发生的事情...我知道它们是HTTP请求,但实际上并不清楚他们在请求什么信息,或者从何处...

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

调用dd()函数时,脚本将输出分配给该函数的所有内容,然后退出。因此,它不会执行以下任何代码。

所以,像这样的东西:

dd('Value of users: ');
dd($type);

将永远无法工作,因为第二个dd()将永远不会执行,因为脚本会在第一个dd()之后退出。

PHP是服务器端的,因此您必须在后端呈现某些内容并将其显示在浏览器中。 PHP无法写入浏览器控制台。我将如何进行调试,请删除第一个dd()调用(dd('addAccountUser() being called ');),然后查看是否可以到达以下dd()调用。

如果这是浏览器中的发布请求,则可以在开发者控制台(F12)中检查该请求,并查看后端的响应。如果是Value of users:之类的东西,那么您就可以拨打第二个dd()电话。

此外,将dd()保留在控制器中将始终将错误代码返回到前端。