小编Pat*_*all的帖子

Phpunit,嘲笑SoapClient是有问题的(模拟魔术方法)

我试图用以下代码模拟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文件...

有没有办法模仿"魔法"方法?

php phpunit soap wsdl web-services

9
推荐指数
2
解决办法
6588
查看次数

PHP如何解析pkcs7签名blob?

我有一个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)

php openssl pkcs#7

6
推荐指数
1
解决办法
2686
查看次数

Laravel nova,“在 null 上调用函数 tap()”

  • Laravel 版本:8.12
  • 新星版本:3.22.0
  • PHP版本:7.4.2
  • 网络服务器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)

它看起来像这样: Nova 错误,tap() 为 null 我努力了:

  • 使用不同的名称重新创建模型和资产。
  • php artisan clear:cachecomposer 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)

laravel laravel-nova

1
推荐指数
1
解决办法
1503
查看次数

标签 统计

php ×2

laravel ×1

laravel-nova ×1

openssl ×1

phpunit ×1

pkcs#7 ×1

soap ×1

web-services ×1

wsdl ×1