POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.
Po dlouhých měsících jsem vydal novou verzi svého frameworku s CRUD generátorem. Překopal jsem design a přidal jsem nové funkce. Budu ho zde srovnávat s verzí 0.4, protože 0.5 jsem zde úplně přeskočil.
Novinky
- Request a response podle PSR-7
- Fasády
- Generátor – Typy položek lze rozšířit
- Generátor – Položky jako povinné a zobrazené v záhlaví tabulek
- Design
Request a response podle PSR-7
Gephart implementuje PSR-7, ale pracuje nezávisle na vlastní implementaci, lze využít jakoukoli jinou, která PSR-7 dodržuje. Díky tomu lze Gephart snadno použít i jako middleware.
blog.katuscak.cz/php-psr-7-http-messages
www.gephart.cz/dokumentace/master/zaklady/http.html
Fasády
Fasády slouží k jednoduššímu přístupu k nejpožívanějším službám.
Jde o jakýsi obal nad existující službou dostupný přes statickou třídu.
Například službu request dostupnou přes dependency injection kontejner
jako Psr\Http\Message\ServerRequestInterface lze získat snadněji než vytažením z kontejneru:
<?php
class DefaultController()
{
public function __construct(\Psr\Http\Message\ServerRequestInterface $request)
{
$this->request = $request;
}
public function index()
{
$queryParams = $this->request->getQueryParams();
}
}
A to použitím fasády Gephart/Framework/Facade/Request:
<?php
use Gephart/Framework/Facade/Request;
class DefaultController()
{
public function index()
{
$queryParams = Request::getQueryParams();
}
}
www.gephart.cz/dokumentace/master/zaklady/fasady.html
Generátor – Typy položek lze rozšířit
Jednotlivé typy jako třeba „text“, „bool“, „textarea“ jsou reprezentovány samostatnými objekty a lze pomocí eventu „Admin\Generator\Service::HOOK_EVENT“ přidávat další dle osobních potřeb.
Nejprve tedy vytvoříte vlastní typ. Například:
<?php # /src/App/My/MyType.php
namespace App\My;
use Admin\Generator\Type\TypeInterface;
final class MyType implements TypeInterface
{
public function getName(): string
{
return "my-custom-type";
}
public function getEntityProperty(): string
{
return <<<EOL
/**
* @var string
*
* @ORM\Type TEXT
* @ORM\Column {{ item.slug }}
* @ORM\Translatable
*/
private \${{ item.slug }} = "";
EOL;
}
public function getEntityMethods(): string
{
return <<<EOL
/**
* @return string
*/
public function get{{ item.slugInCamel }}(): string
{
return \$this->{{ item.slug }};
}
/**
* @param string \${{ item.slug }}
*/
public function set{{ item.slugInCamel }}(string \${{ item.slug }})
{
\$this->{{ item.slug }} = \${{ item.slug }};
}
EOL;
}
public function getSet(): string
{
return <<<EOL
\${{ module.slugSingular }}->set{{ item.slugInCamel }}(\$data["{{ item.slug }}"]);
EOL;
}
public function getForm(): string
{
return <<<EOL
<div class="form-group">
<label for="form_edit_{{ item.slug }}">{{ item.name }}</label>
<textarea class="form-control" name="{{ item.slug }}" rows="10" id="form_edit_{{ item.slug }}">{{ "{{" }} {{ module.slugSingular }}.{{ item.slugInCamel }} {{ "}}" }}</textarea>
</div>
EOL;
}
public function getShow(): string
{
return <<<EOL
{{ "{{" }} {{ module.slugSingular }}.{{ item.slugInCamel }} {{ "}}" }}
EOL;
}
public function getPriority(): int
{
return 500;
}
}
Následně odchytit event a vlastní typ zaregistrovat:
<?php # /src/App/My/MyListener.php
namespace App\My;
use Admin\Generator\Service\Types;
use Gephart\EventManager\Event;
use Gephart\EventManager\EventManager;
class MyListener
{
public function __construct(EventManager $event_manager)
{
$event_manager->attach(Types::HOOK_EVENT, [$this, "registerMyType"]);
}
public function registerMyType(Event $event)
{
$types = $event->getParam("types");
$types[] = MyType::class;
$event->setParams(["types" => $types]);
}
}
V poslední řadě nelze zapomenout listener odchytávají funkci zaregistrovat:
<?php # /web/index.php
use Gephart\Framework\Kernel;
use Gephart\Http\RequestFactory;
include_once __DIR__ . "/../vendor/autoload.php";
$request = (new RequestFactory())->createFromGlobals();
$kernel = new Kernel($request);
$kernel->registerServices([
\App\My\MyListener::class
]);
$response = $kernel->run();
echo $kernel->render($response);
Generátor – Položky jako povinné a zobrazené v záhlaví tabulek
Význam je jednoduchý. Ve formuláři bude položka jako „required“ pokud bude povinná. Při zvolení zobrazení v záhlaví tabulek se ve výpisu tata položka zobrazí hned bez rozkliku do editace přímo v tabulce s daty.
Design
Z původní verze:
Na tento vzhled:
Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)