我是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请求,但实际上并不清楚他们在请求什么信息,或者从何处...
有人能指出我正确的方向吗?
答案 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()
保留在控制器中将始终将错误代码返回到前端。