使用pimple作为我的DI容器,我一直在勇敢地重构小类以依赖DI注入,消除了我可以看到的易于删除的硬编码依赖.
我完成这项任务的方法非常简单,但是我不知道它是否合适,因为除了我在过去一个月里学到的东西之外,我对DI和单元测试的经验很少.
我创建了一个类,ContainerFactory,它是pimple的子类,并且在该子类中创建了只返回特定对象的容器的方法.
构造函数根据类型调用正确的creator方法:
function __construct($type=null, $mode = null){
if(isset($type)){
switch ($type) {
case 'DataFactory':
$this->buildDataFactoryContainer($mode);
break;
case 'DbConnect':
$this->buildDbConnectContainer($mode);
break;
default:
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
容器对象创建的方法签名如下:
public function buildDataFactoryContainer($mode=null)
Run Code Online (Sandbox Code Playgroud)
我的想法是,我可以在调用此容器时设置$ mode进行测试,并让它加载测试值而不是实际的运行时设置.我想避免编写单独的容器类进行测试,这是一种我认为没有全部测试相关代码的简单方法.
我可以改为子类化ContainerFactory即:ContainerFactoryTesting extends ContainerFactory并覆盖其中而不是将测试代码与应用程序代码混合,并使用$ mode = null混合方法签名,但这不是本文的重点.继续,为特定对象创建容器,我只需这样做:
// returns container with DataFactory dependencies, holds $db and $logger objects.
$dataFactoryContainer = new ContainerFactory('DataFactory');
// returns container with test settings.
$dataFactoryTestContainer = new ContainerFactory('DataFactory','test');
// returns container with DbConnect dependencies, holds dbconfig and $logger …Run Code Online (Sandbox Code Playgroud) 在hook_css_alter中,我想在特定页面上禁用样式表.可以通过以下代码段获得首页要求:
function morin_css_alter(&$css) {
if(drupal_is_front_page()){
foreach ($css as $data => $item) {
unset($css[$data]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要删除相册页面上的特定样式.我想过几种方法可以做到这一点,但我想以drupal方式做到这一点.
我发现最接近的函数是drupal_get_destination(),我不认为这是为了这个,但它确实返回数组中的当前路径,如css_alter钩子中添加的以下片段所示.
echo " PATH = " . var_dump(drupal_get_destination());
Output: PATH = array(1) { ["destination"]=> string(6) "photos" }
Run Code Online (Sandbox Code Playgroud)
这是从函数/钩子中获取路径的推荐方法,还是我应该使用全局命名空间中的某些变量?
我想测试一下我放在一起的自定义错误处理类,但这本身就带来了一些问题.
首先,由于在测试中设置自定义error_handler会覆盖PHPUnits error_handling,每次将其更改为自定义实现并进行测试时,必须调用restore_error_handler(),以便以后的测试使phpunits error_handling.虽然我承认没有尝试过,但是每次测试后PHPUnit都会重置自己,我有点怀疑它.
我有各种配置来测试,在不同的条件下,即E_ERROR,E_WARNING等.
然后我有了嘲笑error_handler的想法,但在模拟测试方面仍然很绿.一个快速的谷歌搜索让我找到了类似的方法,这里的想法修改和实施的方式可能适合我的需要...
//Create mock with error_handler method
$errorH = $this->getMock ('ErrorHandler', array ('error_handler'));
// error handler should be called at least once
$errorH->expects ($this->atLeastOnce())->method ('error_handler');
// Mock will need to be configured (here?) and tested
// against specific error_handling settings
// not implemented yet nor needed for this post.
//set mock as error handler for duration of this test
set_error_handler (array($errorH, 'error_handler'));
//test current mock error handler configuration
// for different conditions-> NOTICE / …Run Code Online (Sandbox Code Playgroud) 当一个人这样做时svn switch <source> <target>,我知道它将工作目录切换到目标路径。
我想了解 --relocate 的用途。我认为这仅在存储库的 url 已更改并且想要更新工作副本 url 以指向新的 svn 服务器位置时使用。但似乎Relocate can only change the repository part of an URL。
所以我的问题是, --relocate 开关有什么作用?特别是,它是否可以用于将与以前版本相比有很多差异的供应商分支集成到用户分支,即
svn co path\to\vendor\lib
svn --relocate lib url\path\to\my\branch
svn commit -m "Updated my branch with vendor code without using cp, this way _I think_ enables deleting folders and files that don't exist in new version of vendor lib.
我做对了吗?
在Macbook Pro上,尝试先从curl安装二进制文件,然后再通过brew安装。
两次安装都会在输出末尾生成错误:
~ via v7.1.23
? kubectl version --output=yaml
clientVersion:
buildDate: "2019-04-19T22:12:47Z"
compiler: gc
gitCommit: b7394102d6ef778017f2ca4046abbaa23b88c290
gitTreeState: clean
gitVersion: v1.14.1
goVersion: go1.12.4
major: "1"
minor: "14"
platform: darwin/amd64
error: unable to parse the server version: invalid character '<' looking for beginning of value
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?