Php 我如何才能获得访问确切页面的客户信息?
我有一段代码,它来自我想创建的插件:Php 我如何才能获得访问确切页面的客户信息?,php,api,Php,Api,我有一段代码,它来自我想创建的插件: <?php declare(strict_types = 1); use Ubnt\UcrmPluginSdk\Service\UcrmApi; use Ubnt\UcrmPluginSdk\Service\UcrmSecurity; use Ubnt\UcrmPluginSdk\Security\PermissionNames; chdir(__DIR__); require_once __DIR__ . '/vendor/autoload.
<?php
declare(strict_types = 1);
use Ubnt\UcrmPluginSdk\Service\UcrmApi;
use Ubnt\UcrmPluginSdk\Service\UcrmSecurity;
use Ubnt\UcrmPluginSdk\Security\PermissionNames;
chdir(__DIR__);
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/main.php';
$fullAddress = isset($_GET['fullAddress']) ? $_GET['fullAddress'] : '';
$firstName = isset($_GET['firstName']) ? $_GET['firstName'] : '';
$lastName = isset($_GET['lastName']) ? $_GET['lastName'] : '';
// GET collection of clients
$clients = UCRMAPIAccess::doRequest('clients') ?: [];
//echo sprintf('Found %d clients.', count($clients)) . PHP_EOL;
// GET the client data that access the 'Contract' page
foreach($clients as $client) {
$response = UCRMAPIAccess::doRequest(
sprintf('clients/%d', $client['id']),
'GET',
[
'fullAddress' => $fullAddress,
'firstName' => $firstName,
'lastName' => $lastName,
]
);
if($response !== null) {
echo sprintf('The following details are for client number: <b>%d</b>', $client['id']);
echo '<ul>';
echo sprintf('<li>%d</li>', $client['id']);
echo sprintf('<li>%s</li>', $client['fullAddress']);
echo sprintf('<li>%s</li>', $client['firstName'] . ' ' . $client['lastName']);
echo '</ul>';
} else {
echo sprintf('There was an error retrieving data from client: %d.', $client['id']) . PHP_EOL;
}
}
echo 'Done.' . PHP_EOL;
由于$clients
变量是一个数组,其中包含访问该页面的所有客户端的列表,因此您可以在此处获取集合:
$clients=UCRMAPIAccess::doRequest('clients')?:[];
我相信你是想得到一个刚刚访问页面的客户,因为你说:
单击“合同”页时,我想获取我的客户信息,而不是所有客户的信息
然后,我相信您可以过滤$clients
数组以查找与id匹配的单个客户机,前提是您知道要查找的客户机的id
例如:
$clients=UCRMAPIAccess::doRequest('clients')?:[];
$you=(对象)数组('firstName'=>'foo','lastName'=>'bar','id'=>1);
$meInClients=array\u filter($clients,function($k){
//按键筛选
},数组\过滤器\使用\键)
$clients[meInClients]
但在这种情况下,您的程序似乎不知道用户要查找什么,所以这里的过滤器或搜索可能不起作用。您要做的是获取刚刚访问该页面的最后一个用户,自然该用户将是数组中的最后一个用户
因此:
$clients=UCRMAPIAccess::doRequest('clients')?:[];
$whoJustVisitedPage=$clients[计数($clients)-1]
所以这可能有用
更新:
当您以John Doe的身份访问该页面并转到该页面时,$clientsWhoVisitedPage数组现在变成$clientsWhoVisitedPage+you(当前经过身份验证的用户a.k.a是最后一个查看该页面的人)在这种情况下,您可以首先过滤$client数组,使其不包含当前经过身份验证的用户,然后获取新数组中的最后一个用户
像这样:
$me=$security->getUser();
$clientsExceptMe=array_filter($clients,function($client,$x){
返回$client->id!=$me->id;
},数组_过滤器_使用_两者));
$lastPageVisitor=$clientsExceptMe[计数($clientsExceptMe)-1]
lastPageVisitor
现在应该为您提供访问该页面的最后一位不是当前已验证用户的人。我不知道UCrPageAccess::doRequest的代码,因此我无法帮助您解决此问题,尽管这是第三个问题。(关于该类/方法的搜索文档)
作为一个非常糟糕的解决方案,你可以这样做
$fullAddress=isset($\u GET['fullAddress'])$_获取['fullAddress']:'';
$firstName=isset($\u GET['firstName'])$_获取['firstName']:'';
$lastName=isset($\u GET['lastName'])$_获取['lastName']:'';
//获取客户端的集合
$clients=UCRMAPIAccess::doRequest('clients')?:[];
//echo sprintf('找到%d个客户端'),计数($clients))。PHP_EOL;
//获取访问“合同”页面的客户端数据
foreach($clients作为$client){
$response=UCRMAPIAccess::doRequest(
sprintf('clients/%d',$client['id']),
“得到”,
[
“fullAddress”=>$fullAddress,
“firstName”=>$firstName,
“lastName”=>$lastName,
]
);
如果($response!==null
&&$firstName==$client['firstName']
&&$lastName==$client['lastName']
&&$fullAddress==$client['fullAddress']
) {
echo sprintf('以下详细信息用于客户端编号:%d',$client['id']);
回声“”;
echo sprintf(“- %d
”,$client['id');
echo sprintf(“- %s
”,$client['fullAddress');
echo sprintf(“- %s
”,$client['firstName'..”.$client['lastName']);
回声“
”;
}
}
echo“完成”。PHP_EOL;
进入此页面需要登录吗?如果是,则会话中通常有登录用户的用户id,然后您可以只回显属于该客户端的数据。现在你只是在回应所有的客户。在库的自述中,有一个关于获取已登录用户的说明。($user=$security->getUser();)您说过“我作为客户机登录”。你是怎么做到的?@alexandernig,我使用了自述文件中解释的技术,但是如果我使用$user=$security->getUser()代码>然后我不能作为客户端访问该页面,因为它不是管理员。我想创建的插件只针对客户端@icalvete,我可以切换到客户端区域(我转到客户机,然后选择一个客户机,在客户机页面上我以客户机的身份查看。有关于类/方法UCRMAPIAccess::doRequest的公开信息?你在说什么自述?@icalvete,我发布了UCRMAPIAccess类作为答案。它起作用了,它从一个客户机接收信息,但是,例如,当我以John Doe我访问了该页面,我获得了John Doe的信息,但在我以Jane Doe的身份登录之后,我访问了该页面,我仍然获得了John Doe的信息。嗯,我不确定我是否理解你的意思,但这似乎是你现在面临的另一个问题。是否希望$whoJustVisitedPage
变量保存当前经过身份验证的用户?或者您希望它保存上次访问合同页面的用户的值?如果答案有帮助,您也可以将其标记为第一个问题的解决方案,以帮助其他人。是的,$whoJustVisitedPage
保存当前经过身份验证的用户的变量,这就是我试图解释的是的,但是我很抱歉如果你第一次没有得到它,那是我的错,哈哈。哦,我现在理解你了,所以发生了这样的事情,我将使用抽象术语,让你在一个高层次上理解:-当你以John Doe的身份访问页面并进入该页面时,($clientsWhoVisitedPage
数组现在变成$clientsWhoVisitedPage+你(当前经过身份验证的用户a.k.a是最后一个查看页面的人)
在这种情况下,您可以做的是首先筛选$client
数组