More Related Content Similar to Symfony without the framework (20) More from GOG.com dev team (16) Symfony without the framework14. $request = Request::createFromGlobals();
$request = Request::create('/path' /* data */);
$request = new Request(/* data */);
$get = $request->query->all();
$post = $request->request->all();
$files = $request->files->all();
$attributes = $request->attributes->all();
$cookies = $request->cookies->all();
$server = $request->server->all();
$headers = $request->headers->all();
15. $response = new Response('content', Response::HTTP_OK);
$response = new JsonResponse(['key' => 'val']);
$response = new BinaryFileResponse();
$response = new StreamedResponse();
$response = new RedirectResponse();
$content = $response->getContent();
$code = $response->getStatusCode();
$success = $response->isSuccessful();
$is404 = $response->isNotFound();
$response->send();
16. class Response
{
const HTTP_CONTINUE = 100;
const HTTP_SWITCHING_PROTOCOLS = 101;
const HTTP_PROCESSING = 102; // RFC2518
const HTTP_OK = 200;
const HTTP_CREATED = 201;
const HTTP_ACCEPTED = 202;
const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
const HTTP_NO_CONTENT = 204;
const HTTP_RESET_CONTENT = 205;
const HTTP_PARTIAL_CONTENT = 206;
const HTTP_MULTI_STATUS = 207; // RFC4918
const HTTP_ALREADY_REPORTED = 208; // RFC5842
const HTTP_IM_USED = 226; // RFC3229
const HTTP_MULTIPLE_CHOICES = 300;
const HTTP_MOVED_PERMANENTLY = 301;
const HTTP_FOUND = 302;
const HTTP_SEE_OTHER = 303;
const HTTP_NOT_MODIFIED = 304;
const HTTP_USE_PROXY = 305;
const HTTP_RESERVED = 306;
const HTTP_TEMPORARY_REDIRECT = 307;
const HTTP_PERMANENTLY_REDIRECT = 308; // RFC7238
const HTTP_BAD_REQUEST = 400;
const HTTP_UNAUTHORIZED = 401;
const HTTP_PAYMENT_REQUIRED = 402;
const HTTP_FORBIDDEN = 403;
const HTTP_NOT_FOUND = 404;
const HTTP_METHOD_NOT_ALLOWED = 405;
const HTTP_NOT_ACCEPTABLE = 406;
const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
const HTTP_REQUEST_TIMEOUT = 408;
}
class Response
{
const HTTP_CONFLICT = 409;
const HTTP_GONE = 410;
const HTTP_LENGTH_REQUIRED = 411;
const HTTP_PRECONDITION_FAILED = 412;
const HTTP_REQUEST_ENTITY_TOO_LARGE = 413;
const HTTP_REQUEST_URI_TOO_LONG = 414;
const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
const HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
const HTTP_EXPECTATION_FAILED = 417;
const HTTP_I_AM_A_TEAPOT = 418; // RFC2324
const HTTP_MISDIRECTED_REQUEST = 421; // RFC7540
const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918
const HTTP_LOCKED = 423; // RFC4918
const HTTP_FAILED_DEPENDENCY = 424; // RFC4918
const HTTP_DIDNT_FIT_INTO_MY_SLIDE_EASTER_EGG = 425; // RFC2817
const HTTP_UPGRADE_REQUIRED = 426; // RFC2817
const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585
const HTTP_TOO_MANY_REQUESTS = 429; // RFC6585
const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; // RFC6585
const HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451;
const HTTP_INTERNAL_SERVER_ERROR = 500;
const HTTP_NOT_IMPLEMENTED = 501;
const HTTP_BAD_GATEWAY = 502;
const HTTP_SERVICE_UNAVAILABLE = 503;
const HTTP_GATEWAY_TIMEOUT = 504;
const HTTP_VERSION_NOT_SUPPORTED = 505;
const HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL = 506; // RFC2295
const HTTP_INSUFFICIENT_STORAGE = 507; // RFC4918
const HTTP_LOOP_DETECTED = 508; // RFC5842
const HTTP_NOT_EXTENDED = 510; // RFC2774
const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; // RFC6585
}
20. final class AppKernel implements HttpKernelInterface
{
public function handle(
Request $request,
$type = self::MASTER_REQUEST,
$catch = true
): Response {
return new Response('Success!');
}
}
23. class Router {
public function __construct(
LoaderInterface $loader,
$resource,
array $options = array(),
RequestContext $context = null,
LoggerInterface $logger = null
) {
// ...
}
}
26. $request = Request::createFromGlobals();
$context = new RequestContext();
$context->fromRequest($request);
$router->setContext($context);
$route = $router->match('/users');
$route = $router->matchRequest($request);
$request->attributes->replace($route);
$url = $router->generate('user.view', [
'id' => '6f8f2d43-a907-4671-a96c-895e1354984f',
]);
29. $builder = new ContainerBuilder();
$builder->set('service.id', $instance);
$builder->setParameter('parameter.name', 'value');
$builder->setDefinition('svc', new Definition(Service::class, [
new Reference('service.id'),
new Parameter('parameter.name'),
]));
$svc = $builder->get('svc');
30. $builder = new ContainerBuilder();
$loader = new YamlFileLoader($builder, new FileLocator('etc'));
$loader->load('services.yaml');
$builder->compile();
$dumper = new PhpDumper($builder);
$code = $dumper->dump(['class' => 'AppContainer']);
file_put_contents(__DIR__.'/container.php', $code);
32. class AppContainer extends Container
{
protected function getRoutingService()
{
return $this->services['routing'] =
new SymfonyComponentRoutingRouter(
new SymfonyComponentRoutingLoaderYamlFileLoader(
new SymfonyComponentConfigFileLocator('../etc')
),
'routing.yaml'
);
}
}
39. final class AppKernel implements HttpKernelInterface
{
private $container;
public function __construct(AppContainer $container)
{
$this->container = $container;
}
public function handle(Request $request, $type, $catch)
{
// to be continued...
}
}
40. $routing = $this->container->get('routing');
$context = new RequestContext();
$context->fromRequest($request);
$routing->setContext($context);
$route = $routing->matchRequest($request);
$request->attributes->replace($route);
[$ctrl, $action] = explode(':', $route['_controller'], 2);
return $container->get($ctrl)->{$action.'Action'}($request);
41. $builder = new ContainerBuilder();
$loader = new YamlFileLoader($builder, new FileLocator('etc'));
$loader->load('services.yaml');
$builder->compile();
$dumper = new PhpDumper($builder);
file_put_contents('AppContainer.php', $dumper->dump([
'class' => 'AppContainer',
]));
42. $loader = new YamlFileLoader(new FileLocator(['etc']));
$routing = new Router($loader, 'routing.yaml', [
'cache_dir' => $target,
]);
$routing->match('/');
44. final class UserController
{
private $users;
public function __construct(UserRepositoryInterface $users)
{
$this->users = $users;
}
public function viewAction(Request $request)
{
// to be continued...
}
}
45. $id = $request->attributes->get('id');
try {
$user = $this->users->findById(new UserId($id));
} catch(UserNotFoundException $e) {
return new JsonResponse(null, Response::HTTP_NOT_FOUND);
}
return new JsonResponse($user->toArray(), Response::HTTP_OK);
48. final class MemoryUserRepository implements UserRepositoryInterface
{
private $users = [];
public function findById(UserId $id): ?User
{
return $this->users[$id->toString()] ?? null;
}
public function add(User $user)
{
$this->users[$user->getId()->toString()] = $user;
}
}
49. final class DoctrineUserRepository implements UserRepositoryInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function findByUuid(UuidInterface $uuid)
{
return $this->em->find(User::class, $uuid->toString());
}
public function add(User $user)
{
$this->em->persist($user);
}
}