我是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请求,但不知道它们要求的信息,或者从哪里...
任何人都可以指出我正确的方向来解决这个问题吗?
当你调用dd()
函数时,脚本将输出给函数的任何内容并在之后退出。因此,它不会执行以下任何代码。
所以,比如:
dd('Value of users: ');
dd($type);
永远不会工作,因为第二个dd()
永远不会被执行因为脚本在第一个dd()
之后退出。
PHP是服务器端,因此您必须在后端呈现内容并在浏览器中显示它。 PHP无法写入浏览器控制台。如何调试这个,是删除第一个dd()
调用(dd('addAccountUser() being called ');
),看看是否可以达到以下dd()
调用。
如果这是浏览器中的发布请求,您可以在开发人员控制台(F12)中检查请求,并查看后端的响应。如果它像Value of users:
那样你知道第二次dd()
呼叫可以到达。
此外,将dd()
保留在控制器中将始终向前端返回错误代码。