小编Fre*_*man的帖子

PhpStorm与PHPUnit 8.4给出异常Uncaught PHPUnit \ Runner \ Exception类...找不到

我尝试使用PHPUnit v8。但是,我没有用PhpStorm成功。当我在PhpStorm中运行简单测试(类方法)时,收到以下消息:

PHP Fatal error:  Uncaught PHPUnit\Runner\Exception: Class 'Mrself\\TreeType\\Tests\\Functional\\BuildingTest' could not be found in '/vagrant/symfony-tree-type/tests/Functional/BuildingTest.php'. in /vagrant/symfony-tree-type/vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php:65
Run Code Online (Sandbox Code Playgroud)

是的,我有该类,是的,我已正确配置了psr:

"autoload": {
        "psr-4": {
            "Mrself\\TreeType\\": "./src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Mrself\\TreeType\\Tests\\": "./tests/"
        }
    }
Run Code Online (Sandbox Code Playgroud)

我一切设置正确的证明是,当我运行vendor/bin/phpunit它时,它给我正确的结果。

当我在PhpStorm中运行方法时,得到了以下调用:

/usr/bin/php /vagrant/symfony-tree-type/vendor/phpunit/phpunit/phpunit --configuration /vagrant/symfony-tree-type/phpunit.xml --filter "/(::testFormCanBeBuild)( .*)?$/" Mrself\\TreeType\\Tests\\Functional\\BuildingTest /vagrant/symfony-tree-type/tests/Functional/BuildingTest.php --teamcity
Run Code Online (Sandbox Code Playgroud)

但是,如果我将类名称空间放在前面,那么\\一切也将正常运行。我不知道发生了什么事。PHPUnit版本7也可以正常工作。

phpunit phpstorm

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

Browserify插入全局变量

尽管有很多相关问题,但他们没有回答如何解决以下问题.

我有一个nodejs文件index.js.

var browserify = require('browserify');

var data = getSomeData();
browserify('entry.js').bundle();
Run Code Online (Sandbox Code Playgroud)

我希望这样data可以访问entry.js.我找到了browserify选项,insertGlobalVars但我找不到任何适当的文档或示例.我试过{insertGlobalVars: {myVar: someData}}但它不起作用.

我无法调用,require('someData')因为我的数据仅在执行时生成index.js.

更新:数据是一个数组; key是文件名,值 - 文件内容(大小约为500b).

browserify

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

Php调用类变量的静态方法

我有一个名称空间App\Term,保存为属性:$this->name = 'App\Term'.我怎样才能调用这个类的静态方法$this->name::methodName()呢?还是有另一个解决这个问题的方法吗?

php variables namespaces

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

Laravel 是否缓存配置?

说,我config('app.configKey')第一次得到配置。Laravel 加载文件应用程序并获取所需的密钥。如果我下次调用它,laravel 会再次加载文件吗?或者它存储价值?

我想知道我是否应该写:

$value = config('app.key');
/* Some code here ... */
$anotherVar = $value;
Run Code Online (Sandbox Code Playgroud)

或者:

$value = config('app.key');
/* Some code here ... */
$anotherVar = config('app.key');
Run Code Online (Sandbox Code Playgroud)

这只是一个例子。在实际代码中,我在一类中获得了配置。后来我在另一个班级中再次获得了这个配置。

php config laravel

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

如何识别访客用户的时间比通常存在的时间长

我知道,我可以使用\Session::getId().但它不时变化.也许我不理解会议.据我所知,当php运行时它会启动,当php代码完成时它会被删除.另一方面,我读到会话ID存储在cookie中,当用户再次打开您的站点时,会话'恢复'.那么为什么在我的情况下会话ID会很快到期.如何才能获得至少在一个月内没有变化且会被购物车使用的"会话ID"?

更新:问题变得有点混乱,因为我不想要如何调用某些东西而不知道这些东西是如何工作的.

我想知道如何识别访客用户并在一段时间内获得其唯一ID(比通常存在的会话长).在结果中我想要具有someFunction可以执行以下操作的功能:

$guestId = someFunction();
$dbRow = Model::findByGuestIdOrNew($guestId);
// now $dbRow contains all previosly save info about a guest user, 
// of it does not exists, create new row by `$guestId`.
Run Code Online (Sandbox Code Playgroud)

在我看来,会话有一些唯一的id,它存在的时间比会话长.当我看到大多数购物车包中的购物车项目直接保存到会话时,我想到了这个想法.我真的不知道这些包存放购物车的时间有多长,但我认为这个时间甚至超过一周.这个购物车生命周期是我在使用这样的购物平台时定义的:shopifybigcommerce.我知道他们存放购物车的时间超过一周.所以我想知道他们在创建帐户之前如何识别访客用户.此外,了解大多数"购物车"包存储购物车物品的时间长度将是一个有用的信息.

php session laravel

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

Heroku 无法 ssh 进入免费的 dyno

我正在尝试做的事情:

在此输入图像描述

我为解决该问题所做的工作:

1. 在此输入图像描述

2.由此:是,我有/app/.profile.d/heroku-exec.sh

3. 在此输入图像描述

4.我也发现了这个。并看到这rm /bin/sh && ln -s /bin/bash /bin/sh可能有帮助。但它是针对 docker 的,如果我不使用 docker,我不知道将其插入哪里。我尝试Procfile使用以下内容进行创建:(web: rm /bin/sh && ln -s /bin/bash /bin/sh不要评判我,我只是尝试过)。但在这种情况下,测功机只是崩溃了。

当我没有找到有关此错误的相关信息时,我有点困惑。Heroku 不提供此错误的文档。作为一种变体,我想这Establishing credentials... error可能意味着我没有通过任何身份验证。或许。但哪一个呢?我可以heroku run bash,说明我通过了认证。也许exec需要 ssh 密钥?

有什么建议么?

heroku

5
推荐指数
0
解决办法
2902
查看次数

如何在 symfony 中通过电子邮件发送控制台错误

我已将我的应用程序配置为以这种方式发送有关异常的电子邮件 ( prod/monolog.yaml):

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: grouped
            excluded_404s:
                # regex: exclude all 404 errors from the logs
                - ^/
        grouped:
            type: group
            members: [nested, deduplicated]
        deduplicated:
            type: deduplication
            handler: swift
        swift:
            type: swift_mailer
            from_email: '%admin_notifier_from%'
            to_email: '%admin_notifier_to%'
            subject: 'Error'
            level: debug
            formatter: monolog.formatter.html
            content_type: text/html
        nested:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        console:
            type:   console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine"]
Run Code Online (Sandbox Code Playgroud)

它有效。当我在某个控制器中抛出异常时,打开该控制器的 url 我收到一封带有异常的电子邮件。所以电子邮件在 http 级别工作。但是它不在控制台级别。我正在使用 SF v4.2。我发现在最近的 symfony 版本中添加了控制台异常日志记录,因此无需为其添加错误控制台侦听器。它应该适用于我的版本。实际上我在日志文件中看到异常消息。但是没有邮箱。所以我决定添加一个错误侦听器并记录关键消息(假设它应该触发主 Monolog 处理程序)。所以我做到了。再一次,我在日志文件中看到了我的关键消息,但仍然没有电子邮件。那我做错了什么?我想收到有关控制台异常的异常电子邮件。

我试图用“快速”处理程序替换“重复数据删除”处理程序,但它没有帮助。

symfony symfony4

5
推荐指数
0
解决办法
259
查看次数

如何解决PHPStorm警报类的"多个定义"

我使用PHPStorm并具有以下消息"多个定义" PHPUnit\Framework\TestCase.我不确定,但看起来像PHPStorm使用compose autoload系统.所以我试图找到不必要的类定义所在的目录并排除它们.

我发现我可以使用exclude-from-classmap房产了autoload.所以我添加了以下内容:

"vendor/cloudinary/cloudinary_php/tests/",
"vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
Run Code Online (Sandbox Code Playgroud)

这些是存在不必要的类定义的目录.然后我跑了composer dump-autoload.没有改变.重启PHPStrom - 什么都没有.

这是我的整个自动加载部分:

"autoload": {
        "psr-4": { "": "src/" },
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
        "files": [
            "src/helpers/helpers.php"
        ],
        "exclude-from-classmap": [
            "vendor/cloudinary/cloudinary_php/tests/",
            "vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
        ]
    },
Run Code Online (Sandbox Code Playgroud)

我注意到了相关的问题,但它们不符合我的要求.我知道从composer中排除文件夹的方法.

phpstorm composer-php

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

如何使用phpunit在功能测试中使symfony显示异常

当我在控制台中使用 PhpUnit 运行单元测试时,所有异常都会立即显示在那里。然而,当我转向功能测试时,我看不到发生的异常。

首先,我尝试了 symfony,WebTestCase就像这里所说的那样。所以我$client用所需的参数打电话,我得到了回应。但是我花了一些时间才明白这种行为就像我手动打开要测试的页面一样。来自$client->request包含文本 (html)的响应。是的,那里显示了错误,但有很多 html,而且很难找到异常。是的,我可以使用,$crawler->filter('.text-exception')->first()->text()但我希望异常在单元测试中可见。当我测试命令时,PhpUnit 和正常情况一样显示异常。

我试图将代码复制web/app_dev.php到测试用例。但它是一样的。我只有 html 响应。

那么如何才能让 PhpUnit 在功能测试中像单元测试一样显示异常呢?

phpunit symfony

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

在'if - else'语句中检查'else'中的相等性

假设我们有这样的代码(js):

/**
 * @param  {String} type Could be only 'high' or 'low'
 * @return {String}
 */
function getSome(type) {
    if (type == 'high') {
        return 'This is high';
    } else if (type == 'low') {
        return 'This is low';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这个变体比这更好(我不包括注释;它们是相同的)?:

function getSome(type) {
    if (type == 'high') {
        return 'This is high';
    } else {
        return 'This is low';
    }
}
Run Code Online (Sandbox Code Playgroud)

我多次遇到类似的情况.通常我没有考虑最好的变体,并写了第一个.但现在我想决定将来使用哪种变体.

最后一个问题.如果我需要检查变量的相等性,else如果变量只有两个值,并且第一个值是在if语句中给出的?我也想知道使用函数注释如何影响答案.

javascript

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

如何禁用运行时 php 中已弃用的警告?

我想trigger_error('Deprecated', E_USER_DEPRECATED);在运行时抑制此警告。从我读过的内容来看,我可以使用error_reporting(E_ALL & -E_USER_DEPRECATED & -E_DEPRECATED);. 但这是行不通的。我尝试过error_reporting使用 是否可以正常工作error_reporting(0)。这有效。我错过了什么?我没有找到其他方法来解决我的问题。并且没有注意到这种方式对其他人不起作用。

我的代码不抑制已弃用的警告:

error_reporting(E_ALL & -E_USER_DEPRECATED);
trigger_error('Deprecated', E_USER_DEPRECATED);
Run Code Online (Sandbox Code Playgroud)

PHP 版本:7.0.14.

php error-reporting

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

PhpStorm更改类片段(模板)

PhpStorm版本2017.1.

当我想添加一个类文件时,我右键单击必要的文件夹> New> PHP Class,我得到了定义的php类.但我想改变一些事情.

首先,删除由PhpStorm创建,并且没有{新行,但只有一行具有类名.

我该怎么做?我对PhpStorm很新,我希望它有一些片段,但谷歌搜索没有奇怪的结果.

phpstorm

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

PhpStorm插入当前名称空间

我希望PhpStorm默认情况下或使用热键或实时模板插入当前名称空间。

在我创建新的Php类(“ New | PHP Class”对话框)之后,有一个用于命名空间的字段。有没有办法自动填充它?看起来没什么大不了的,因为在我的情况下,名称空间只是从开始的目录路径(我使用composer)src。我的搜索工作根本没有给我任何帮助。看起来PhpStrom没有此功能。但是也许有一些插件或黑客?

phpstorm

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