Skip to content

Commit 0b7fe74

Browse files
committed
added FormFactory & DI service
1 parent 7927223 commit 0b7fe74

File tree

5 files changed

+91
-0
lines changed

5 files changed

+91
-0
lines changed

src/Bridges/FormsDI/FormsExtension.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ public function __construct()
2626
}
2727

2828

29+
public function beforeCompile()
30+
{
31+
$builder = $this->getContainerBuilder();
32+
33+
if ($builder->findByType(Nette\Http\IRequest::class)) {
34+
$builder->addDefinition($this->prefix('factory'))
35+
->setFactory(Nette\Forms\FormFactory::class);
36+
}
37+
}
38+
39+
2940
public function afterCompile(Nette\PhpGenerator\ClassType $class)
3041
{
3142
$initialize = $this->initialization ?? $class->getMethod('initialize');

src/Forms/Form.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,13 @@ public function getToggles(): array
666666
/********************* backend ****************d*g**/
667667

668668

669+
/** @internal */
670+
public function setHttpRequest(Nette\Http\IRequest $request)
671+
{
672+
$this->httpRequest = $request;
673+
}
674+
675+
669676
private function getHttpRequest(): Nette\Http\IRequest
670677
{
671678
if (!$this->httpRequest) {

src/Forms/FormFactory.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Nette Framework (https://nette.org)
5+
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace Nette\Forms;
11+
12+
use Nette;
13+
14+
15+
/**
16+
* Creates form.
17+
*/
18+
final class FormFactory
19+
{
20+
use Nette\StaticClass;
21+
22+
/** @var Nette\Http\IRequest */
23+
private $httpRequest;
24+
25+
26+
public function __construct(Nette\Http\IRequest $httpRequest)
27+
{
28+
$this->httpRequest = $httpRequest;
29+
}
30+
31+
32+
public function createForm(string $name = null): Form
33+
{
34+
$form = new Form($name);
35+
$form->setHttpRequest($this->httpRequest);
36+
return $form;
37+
}
38+
}

tests/Forms.DI/FormsExtension.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,18 @@ Assert::exception(function () {
5252

5353
eval($compiler->addConfig($config)->setClassName('Container2')->compile());
5454
}, Nette\InvalidArgumentException::class, 'Constant Nette\Forms\Form::Foo\Bar or constant Foo\Bar does not exist.');
55+
56+
57+
test('form factory', function () {
58+
$compiler = new DI\Compiler;
59+
$compiler->addExtension('http', new Nette\Bridges\HttpDI\HttpExtension);
60+
$compiler->addExtension('forms', new FormsExtension);
61+
62+
eval($compiler->setClassName('Container3')->compile());
63+
64+
$container = new Container3;
65+
$container->initialize();
66+
$factory = $container->getByType(Nette\Forms\FormFactory::class);
67+
$form = $factory->createForm();
68+
Assert::type(Form::class, $form);
69+
});

tests/Forms/FormFactory.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\Forms\Form;
6+
use Nette\Forms\FormFactory;
7+
use Tester\Assert;
8+
9+
10+
require __DIR__ . '/../bootstrap.php';
11+
12+
13+
$request = (new Nette\Http\RequestFactory)->fromGlobals();
14+
$factory = new FormFactory($request);
15+
$form = $factory->createForm();
16+
Assert::type(Form::class, $form);
17+
18+
19+
$form = $factory->createForm('foo');
20+
Assert::same('foo', $form->getName());

0 commit comments

Comments
 (0)