SDFSDFSDFGhttps://dev.mysql.com/doc/refmhhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_byttps://dhttps://https://dhttps://dev.mysql.com/doc/refman/5.7/en/group-by-handling.htmlev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_bydev.mysql.com/doc/refman/5.7/en/group-by-handling.htmlev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_byan/5.7/en/group-by-h
@mandeephub Have a look at this two links :https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
_
@mandeephub Have a look at this two links :https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
_
@mandeephub Have a look at this two links :https://dev.mysq
l.com/https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.htmldoc/refman/5.7/en/group-by-handling.html
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
_
@mandeephub Have a look at this two links :https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
_
anhttps://dev.mysql.com/doc/refman/5.7/en/group-by-handling.htmldling.html
as i understood definitions are instructions on how classes should be instantiated once requested
im trying to create a definition for the class to call some method which will receive container itself
twig works good by my Model class doesnt. what is wrong ?
use Twig\Environment;
use Core\Model;
use Psr\Container\ContainerInterface;
return [
Environment::class => function () {
$loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/../App/Views');
return new \Twig\Environment($loader);
},
Model::class => function (ContainerInterface $container){
$model = new Model();
$model->setContainer($container)->getConnection();
return $model;
}
];
public function __construct()
{
}
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
return $this;
}
public function getConnection()
{
$dbType = ucfirst($this->container->get('db.type'));
$class = self::DB_NAMESPACE . $dbType;
try {
$this->db = $this->container->get($class)->getConnection();
} catch (\Exception $e) {
echo $e->getMessage();
}
return $this->db;
}
/*
public function __construct(ContainerInterface $container)
{
$dbType = ucfirst($container->get('db.type'));
$class = self::DB_NAMESPACE . $dbType;
try {
$this->db = $container->get($class)->getConnection();
} catch (\Exception $e) {
echo $e->getMessage();
}
}
*/
Hi there,
I have a question about \DI\get()
and the documentation saying that it's a "alias" to any existing definition. The result I get is a bit misleading when dealing with non-singleton objects. Here's my example:
class UniqId {
public $id;
public function __construct() {
$this->id = uniqid();
}
}
class OtherClass {
public $id;
public function __construct(UniqId $u) {
$this->id = $u->id;
}
}
$containerBuilder = new DI\ContainerBuilder();
$containerBuilder->addDefinitions([
UniqId::class => \DI\create(),
'UniqId_alias' => \DI\get(UniqId::class),
OtherClass::class => \DI\autowire(),
'OtherClass_alias' => \DI\get(OtherClass::class),
'OtherClass_alias2' => \DI\autowire(OtherClass::class)
->constructorParameter('u', \DI\get('UniqId_alias'))
]);
$container = $containerBuilder->build();
var_dump([
'UniqId ' => $container->make(UniqId::class)->id,
'UniqId (again) ' => $container->make(UniqId::class)->id,
'UniqId_alias ' => $container->make('UniqId_alias')->id,
'OtherClass ' => $container->make(OtherClass::class)->id,
'OtherClass_alias ' => $container->make('OtherClass_alias')->id,
'OtherClass_alias2 ' => $container->make('OtherClass_alias2')->id,
]);
The result is as follows:
array (size=6)
'UniqId ' => string '5d0e6194728ec' (length=13)
'UniqId (again) ' => string '5d0e619472911' (length=13)
'UniqId_alias ' => string '5d0e61947294e' (length=13)
'OtherClass ' => string '5d0e61947294e' (length=13)
'OtherClass_alias ' => string '5d0e61947294e' (length=13)
'OtherClass_alias2 ' => string '5d0e61947294e' (length=13)
My idea was that as UniqId
is defined as a non-singleton because of \DI\create()
, so were its references when used as dependencies of other classes (here OtherClass
ot its aliases). But actually it's not. The only solution I've found is to "force" it when defining the dependent class:
...
'OtherClass_alias3' => \DI\autowire(OtherClass::class)
->constructorParameter('u', \DI\create(UniqId::class))
...
To be more precise about what results I'm confused about, it's:
'OtherClass ' => string '5d0e6316dbd5a' (length=13)
'OtherClass_alias ' => string '5d0e6316dbd5a' (length=13)
'OtherClass_alias2 ' => string '5d0e6316dbd5a' (length=13)
where clearly the instance of UniqId
which is injected in OtherClass
is a singleton, when I would like to have a new instance each time a new OtherClass
is created.
== index.php
declare(strict_types=1);
(require __DIR__ . '/app/config/bootstrap.php')->run();
== bootstrap.php
declare(strict_types=1);
use DI\ContainerBuilder;
use Slim\App;
require_once __DIR__ . '/../../../vendor/autoload.php';
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions(__DIR__ . '/container.php');
$container = $containerBuilder->build();
$app = $container->get(App::class);
(require __DIR__ . '/routes.php')($app);
(require __DIR__ . '/middleware.php')($app);
return $app;
== container.php
declare(strict_types=1);
use Psr\Container\ContainerInterface;
use Selective\Config\Configuration;
use Slim\App;
use Slim\Factory\AppFactory;
return [
Configuration::class => function () {
return new Configuration(require __DIR__ . '/settings.php');
},
App::class => function (ContainerInterface $container) {
AppFactory::setContainer($container);
$app = AppFactory::create();
//$app->setBasePath('/app');
return $app;
},
PDO::class => function (ContainerInterface $container) {
$config = $container->get(Configuration::class);
...
return new PDO($dsn, $username, $password, $flags);
},
];
== settings.php
$settings = [];
$settings['root'] = dirname(__DIR__);
$settings['temp'] = $settings['root'] . '/tmp';
$settings['public'] = $settings['root'] . '/public';
$settings['error_handler_middleware'] = [
'display_error_details' => true,
'log_errors' => true,
'log_error_details' => true,
];
$settings['db'] = [
'driver' => 'mysql',
'host' => 'localhost',
...
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'flags' => [
...
],
];
return $settings;