Pokud jste našli chybu, je důležité přidat relevantní informace pro reprodukování problému a rychlejší opravě. If you have the application publicly on Github please submit the repository address along with the issue description. Také můžete použít Gist pro jakýkoliv kód který s námi chcete sdílet.

Vytvoření malého skriptu

A small single-file script is usually the best way to reproduce a problem:

<?php

$di = new Phalcon\DI\FactoryDefault();

//Register your custom services
$di['session'] = function() {
    $session = new \Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
};

$di['cookies'] = function() {
    $cookies = new Phalcon\Http\Response\Cookies();
    $cookies->useEncryption(false);
    return $cookies;
};

class SomeClass extends \Phalcon\DI\Injectable
{
    public function someMethod()
    {
        $cookies = $this->getDI()->getCookies();
        $cookies->set("mycookie", "test", time() + 3600, "/");
    }
}

$c = new MyClass;
$c->setDI($di);
$c->someMethod();

$di['cookies']->send();

var_dump($_SESSION);
var_dump($_COOKIE);

Depending on your application, you can use these skeletons in order to create your own script and reproduce the bug:

Database

Remember to add to the script how you registered the database service:

<?php

$di = new Phalcon\DI\FactoryDefault();

$di->setShared('db', function () {
    return new \Phalcon\Db\Adapter\PDO\Mysql(array(
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'dbname'   => 'test',
        'charset'  => 'utf8',
    ));
});

$result = $di['db']->query('SELECT * FROM customers');

Single/Multi-Module applications

Remember to add to the script how you are creating the Phalcon\Mvc\Application instance:

<?php

$di  = new \Phalcon\DI\FactoryDefault();

//other services

$app = new \Phalcon\Mvc\Application();
$app->setDi($di);

//register modules if any

echo $app->handle->getContent()

Include models and controllers as part of the test:

<?php

$di  = new \Phalcon\DI\FactoryDefault();

//other services

$app = new \Phalcon\Mvc\Application();
$app->setDi($di);

class IndexController extends Phalcon\Mvc\Controller
{
    public function indexAction() { 
          /* your content here */
    }
}

class Users extends Phalcon\Mvc\Model
{
}

echo $app->handle->getContent()

Micro application

Follow this structure to create the script:

<?php

$di = new \Phalcon\DI\FactoryDefault();

$app = new \Phalcon\Mvc\Micro($di);

//define your routes here

$app->handle();

ORM

You can provide your own database schema or even better use any of the phalcon test databases. Follow this structure to create the script:

<?php

use Phalcon\DI;
use Phalcon\Events\Manager as EventsManager;
use Phalcon\Db\Adapter\Pdo\Mysql as Connection;
use Phalcon\Mvc\Model\Manager as ModelsManager;
use Phalcon\Mvc\Model\Metadata\Memory as ModelsMetaData;

$eventsManager = new EventsManager();

$di = new DI();

$connection = new Connection(array(
    "host" => "localhost",
    "username" => "root",
    "password" => "",
    "dbname" => "test"
));

$connection->setEventsManager($eventsManager);

$eventsManager->attach('db',
    function ($event, $connection) {
        switch ($event->getType()) {
            case 'beforeQuery':
                echo $connection->getSqlStatement(), "<br>\n";
                break;
        }
    }
);

$di['db'] = $connection;
$di['modelsManager'] = new ModelsManager();
$di['modelsMetadata'] = new ModelsMetadata();

if (!$connection->tableExists('user', 'test')) {
    $connection->execute('CREATE TABLE user (id integer primary key auto_increment, email varchar(120) not null)');
}

class User extends \Phalcon\Mvc\Model
{
    public $id;

    public $email;

    public static function myCustomUserCreator()
    {
        $newUser = new User();
        $newUser->email = 'test';
        if ($newUser->save() == false) {
            return false;
        }
        return $newUser->id;        
    }
}

echo User::myCustomUserCreator();