我试图用以下代码模拟SoapClient:
$soapClientMock = $this->getMockBuilder('SoapClient')
->disableOriginalConstructor()
->getMock();
$soapClientMock->method('getAuthenticateServiceSettings')
->willReturn(true);
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Phpunit mockbuilder没有找到函数getAuthenticateServiceSettings.这是WSDL中指定的Soap函数.
但是,如果我扩展SoapClient类和getAuthenticateServiceSettings方法,它确实有效.
问题是我有100个SOAP调用,都有自己的参数等所以我不想模拟每个SOAP函数,或多或少地重新创建整个WSDL文件...
有没有办法模仿"魔法"方法?
我有一个PKCS7签名,我可以从中获取解析内容
openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
Run Code Online (Sandbox Code Playgroud)
但是如何使用PHP的openssl函数来实现相同的输出?
编辑.我成功地使用以下函数创建了正确的PEM文件:
function der2pem($der_data, $type="CERTIFICATE") {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN $type-----\n".$pem."-----END $type-----\n";
return $pem;
}
$data = der2pem($der_data, "PKCS7");
Run Code Online (Sandbox Code Playgroud)
然而,我并没有成功地使用PHP手册中提到的任何功能来解析数据.它使用openssl工作:
openssl pkcs7 -inform PEM -in signature.pkcs7 -print_certs -text
Run Code Online (Sandbox Code Playgroud) artisan serve感觉好像我在 Laravel Nova 中缺少了一些重要的东西。我有两个模型,我希望它们作为 Nova 资源,并且它们之间存在关系。它们的模型称为“模板”和“资产”,其中一个“模板”具有许多“资产”。
模型中没有逻辑,只有两个简单的模型,具有简单的资源(例如文本字段)。
当我查看或编辑模板时,我得到:
"message": "Call to a member function tap() on null",
"exception": "Error",
"file": "laravel\\nova\\src\\Query\\Builder.php",
"line": 265,
Run Code Online (Sandbox Code Playgroud)
php artisan clear:cache与composer dump每一个变化之间。模板模型(Models/Template.php):
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Template extends Model
{
use HasFactory;
protected $casts = [
'published_at' => 'datetime',
];
public function assets() {
$this->hasMany(Asset::class);
}
}
Run Code Online (Sandbox Code Playgroud)
模板资源(Nova/Template.php):
<?php
namespace App\Nova;
use Illuminate\Http\Request; …Run Code Online (Sandbox Code Playgroud) php ×2
laravel ×1
laravel-nova ×1
openssl ×1
phpunit ×1
pkcs#7 ×1
soap ×1
web-services ×1
wsdl ×1