小编Ben*_*ine的帖子

使用PHPUnit模拟PDO对象

我在使用PHPUnit模拟PDO对象时遇到困难.

网上似乎没有太多关于我的问题的信息,但是我可以收集的信息:

  1. PDO具有'final'__ wakeup和__sleep方法,可以防止它被序列化.
  2. PHPunit的模拟对象实现在某些时候将对象序列化.
  3. 当发生这种情况时,单元测试会因PDO生成的PHP错误而失败.

通过在单元测试中添加以下行,有一个旨在防止此行为的功能:

class MyTest extends PHPUnit_Framework_TestCase

{    
    protected $backupGlobals = FALSE;
     // ...

}
Run Code Online (Sandbox Code Playgroud)

资料来源:http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

这不适合我,我的测试仍然会产生错误.

完整的测试代码:

class MyTest extends PHPUnit_Framework_TestCase
{

    /**
     * @var MyTest
     */
    private $MyTestr;

    protected $backupGlobals = FALSE;

    /**
     * Prepares the environment before running a test.
     */
    protected function setUp()
    {
        parent::setUp();

    }

    /**
     * Cleans up the environment after running a test.
     */
    protected function tearDown()
    {

        parent::tearDown();
    }

    public function __construct()
    {

        $this->backupGlobals = …
Run Code Online (Sandbox Code Playgroud)

php phpunit pdo unit-testing

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

模拟所有DateTime实例用于测试目的的时间

我希望能够在DateTimePHPUnit或Behat Test的持续时间内为每个实例化实例设置时间.

我正在测试与时间相关的业务逻辑.例如,类中的方法仅返回过去或将来的事件.

如果可能的话,我不想这样做:

  1. 写一个包装器DateTime并使用它代替DateTime整个代码.这将涉及重写我当前的代码库.

  2. 每次运行测试/套件时动态生成数据集.

所以问题是:是否有可能覆盖DateTimes行为以始终在请求时提供特定时间?

php testing datetime phpunit behat

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

使用Symfony Forms/Silex和Twig时出错

我正在尝试使用Silex应用程序中的twig呈现Symfony表单.我正在使用Symfony 2 Form库,Symfony Bridge Twig Forms Extension和Twig.

这是我的bootsrap文件:

require_once __DIR__ . '/../app/silex.phar';
$app = new Silex\Application();

$app['debug'] = true;

// Set up the autoloader
require_once __DIR__ . '/../app/vendor/.composer/autoload.php';

// Load Configuration into container
$parser = new Symfony\Component\Yaml\Parser();
$config = $parser->parse(file_get_contents(__DIR__ . '/../app/config/config.yml'));
$app['config'] = $config;

// Set up Symfony bridge (nice twig functions)
$app->register(new Silex\Provider\SymfonyBridgesServiceProvider(), array(
'symfony_bridges.class_path' => __DIR__ . '/vendor/symfony/twig-bridge',
));

// Set Up Templating
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__ . '/../app/views',
'twig.class_path' => __DIR__ . '/../app/vendor/twig/twig/lib',
)); …
Run Code Online (Sandbox Code Playgroud)

php twig silex

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

使用PECL OS在Ubuntu上安装PDO_MYSQL在PHP 5.1.6上

我在使PDO_MYSQL工作时遇到了实际问题.

我开始只是尝试通过PECL安装PDO_MYSQL驱动程序,但是当这不起作用时,我仔细查看是否有任何问题报告.似乎PDO的嵌入版本与PDO_MYSQL之间可能存在冲突.为此,我决定从PECL重新安装它的所有依赖项.

环境:

操作系统:Ubuntu
PHP Ver:5.1.6(由于客户端环境无法升级)

程序如下:

PECL uninstall PDO_MYSQL
PECL uninstall PDO
PECL uninstall mysql
PECL install mysql
PECL install PDO
PECL install PDO_MYSQL

Lines Added to PHP.ini
extension=mysql.so
extension=pdo.so
extension=pdo_mysql.so

apachectl restart
[warn] php5_module is already loaded, skipping
Run Code Online (Sandbox Code Playgroud)

然后我检查PHPINFO以查看安装了哪些模块.我知道了:

PDO drivers     sqlite2 
Run Code Online (Sandbox Code Playgroud)

而已!

如果任何人可以提出任何解决方案,我将深表感激.我需要MYSQL PDO驱动程序来为即将到来的项目运行zend框架......是的,由于PHP版本,我必须使用v1.6.

php ubuntu zend-framework pecl

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

为什么第一次向Facebook IFrame App Canvas页面请求POST请求?

我注意到今天我设置了我的第一个FB应用程序(在facebook中访问的iframe应用程序),通过facebook向它发出的所有请求都是HTTP POST而不是GET请求.这有什么理由吗?如果我想实现HTTP缓存怎么办?

我刚开始在FB平台上开发,请原谅我,如果这是一个显而易见的问题,但我用Google搜索并找不到答案.

caching facebook-iframe facebook-apps

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

OAUTH使用PHP的PECL OAUTH - 使用方法getRequestToken()时不能使用POST?

在尝试对API进行身份验证时,我正在使用PECL OAuth.

示例代码:

<?php

$requestUri = 'http://openapi.lovefilm.com/oauth/request';

$consumerKey = 'MYCONSUMERKEY'; 
$consumerSecret = 'MYSECRET';

$oauth = new OAuth($consumerKey, $consumerSecret);

$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setVersion('1.0');
$oauth->setTimestamp(mktime());


$oauth->enableDebug();

try
{
    $req = $oauth->getRequestToken($requestUri, 'oob');
    var_dump($req);
}
catch(OAuthException $e)
{
    print '<pre>';
    var_dump($e);

    var_dump($oauth->debugInfo);
}

?>
Run Code Online (Sandbox Code Playgroud)

他们提供的规范(http://developer.lovefilm.com/-registration req)说我应该发一个类似下面的请求:

POST/oauth/request_token HTTP/1.1主机:openapi.lovefilm.com授权:OAuth oauth_callback ="http%3A%2F%2Fyour-service.com%2Fsuccess",oauth_consumer_key ="2blu7svnhwkzw29zg7cwkydn",oauth_nonce ="5f38dbc02a97567965f14d",oauth_signature = "sPSVmqN%2FXu9k0wlZxF0PqPZwYGo%3D",oauth_signature_method ="HMAC-SHA1",oauth_timestamp ="1278499295",oauth_version ="1.0"

但是,当我使用该方法时:

$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
Run Code Online (Sandbox Code Playgroud)

生成的请求始终是GET.

有人可以帮忙吗?

谢谢,

php oauth pecl

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

在Twig视图中设置变量预渲染

我在一个silex应用程序中使用Twig.在预请求挂钩中,我想检查用户是否已登录,以及是否将用户对象添加到Twig(因此我可以在菜单中呈现登录/注销状态).

但是看过源代码后,它看起来只能提供模板视图变量作为render方法的参数.我在这里错过了什么吗?

这正是我想要实现的目标:

// Code run on every request    

$app->before(function (Request $request) use ($app)
{
    // Check if the user is logged in and if they are
    // Add the user object to the view

    $status = $app['userService']->isUserLoggedIn();

    if($status)
    {
        $user = $app['userService']->getLoggedInUser();

        //@todo - find a way to add this object to the view 
        // without rendering it straight away
    }

});
Run Code Online (Sandbox Code Playgroud)

php twig silex

4
推荐指数
2
解决办法
6991
查看次数

使用Symfony Forms,Twig和SymfonyTwigBridge时,如何覆盖默认模板?

我在Silex应用程序中使用Symfony和Twig.

我有一个表格的注册页面:

{% extends "base.twig" %}

{% block title %}Welcome to My Example site{% endblock %}
{% block head %}
{{ parent() }}
{% endblock %}
{% block content %}

<div class="row">
<div class="span12">
    <h2>Register</h2>
    <p>
        Register for this site and we'll give you free access to cool stuff
        in addition you can subscribe to our premium content.
    </p>

    <form  action="{{app.config.site.secureUrl}}/register-handler" method="post">
        <fieldset >
            {{ form_widget(form) }}
            <button type="submit" class="btn btn-info">Send</button>
        </fieldset>
    </form>
</div>
</div>

</div>

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

尝试呈现页面时出现以下错误: …

php symfony-forms twig silex

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

在Magento sales_order_save_commit_after钩子中为什么我的订单中有重复的项目?

我正在使用Magento的观察者钩子来挂钩订单保存过程.在订单设置完成并保存后,我想向Web服务发送消息.

但是我注意到Web服务经常收到重复的订单商品.

这是我的代码的简化版本,我知道它会出现问题:

<?php 
class Name_Modulename_Model_Observer {


public function sales_order_save_commit_after($observer) {

    // Gets the order which is being saved.
    $order  = $observer->getOrder();

    $status = $order->getStatus();

    if($status != "complete") {
        continue;
    }

    // PROBLEM - The number of Mage_Sales_Model_Order_Item 
    // in this array sometimes does not correspond with the 
    // The number of items in the basket. 
    $items = $order->getAllItems();

    $itemsInOrder = array();

    foreach($items as $item) {

        $product = $item->getProduct();

        $itemsInOrder[] = $product->name;

    }

    // At the end of the loop …
Run Code Online (Sandbox Code Playgroud)

php magento

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

如何覆盖Magento核心块?

我试图覆盖Magento审查系统并使用我自己的.

我创建了一个模块并将其激活(可在站点的配置区域中查看).我已经创建了一个自定义布局,我现在正试图覆盖一些块.

我尝试了两种方法:

<review_product_list translate="label">

    <block type="reviewwidget/widget" name="product.info.product_additional_data" as="product_additional_data" template="reviewwidget/widget.phtml"></block> 

</review_product_list>
Run Code Online (Sandbox Code Playgroud)

<review_product_list translate="label">

    <reference name="content">
        <block type="reviewwidget/widget" name="product.info.product_additional_data" as="product_additional_data" template="reviewwidget/widget.phtml"></block> 
    </reference>   

</review_product_list>
Run Code Online (Sandbox Code Playgroud)

我期望第一种方法覆盖块并使用我的自定义块和模板.它没有效果.

第二种方法在我试图替换的块之后在我的自定义模板中呈现有效.

谁能告诉我如何更换这个块?

php magento

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