Más contenido relacionado La actualidad más candente (20) Similar a Symfony internals [english] (20) Symfony internals [english]3. Who am I?
Raúl Fraile
@raulfraile
PHP/Symfony2 freelance developer
9. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
18. PSR-0
Approved by the “Framework Interop
Group”
github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
19. PSR-0
Fully Qualified Name
SymfonyCoreRequest
ZendMailMessage
[vendor_path]/Symfony/Core/Request.php
[vendor_path]/Zend/Mail/Message.php
Filesystem
20. ClassLoader
// namespaced class name
$namespace = substr($class, 0, $pos);
foreach ($this->namespaces as $ns => $dirs) {
if (0 !== strpos($namespace, $ns)) {
continue;
}
foreach ($dirs as $dir) {
$className = substr($class, $pos + 1);
$file = $dir . DIR_SEPARATOR .
str_replace('',DIR_SEPARATOR, $namespace) .
DIR_SEPARATOR .
str_replace('_', DIR_SEPARATOR, $className) . '.php';
if (file_exists($file)) {
return $file;
}
}
}
21. ClassLoader
$loader->findFile(
'SymfonyComponentHttpFoundationRequest'
);
/Sites/desymfony/app/../vendor/symfony/src/
Symfony/Component/HttpFoundation/Request.php
22. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
23. AppKernel.php
// src/AppKernel.php
use SymfonyComponentHttpKernelKernel;
use SymfonyComponentConfigLoaderLoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new SymfonyBundleTwigBundleTwigBundle(),
...
);
return $bundles;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}
}
24. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
Debug
Environment
25. AppKernel.php
If (true === $debug) {
Saves initial time (microtime)
display_errors = 1
error_reporting = -1
DebugUniversalClassLoader
} else {
display_errors = 0
}
26. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
27. LoadClassCache
Objective: map
FQN/filenames of
classes and interfaces
29. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
32. Request
Request
GET /index.php HTTP/1.1␍␊
Host: test.com␍␊ $_GET
query
Accept-Language:en;q=0.8␍␊
request
Accept-Encoding:gzip␍␊ $_POST
cookies
User-Agent: Mozilla/5.0␍␊
␍␊ files
$_COOKIE
server
headers
$_FILES
getHost
$_SERVER
getClientIp
...
33. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
35. HttpKernel
Handles an
environment consisting
of bundles, DIC...
39. ContainerBuilder
// example.com/src/container.php
use SymfonyComponentDependencyInjection;
use SymfonyComponentDependencyInjectionReference;
$sc = new DependencyInjectionContainerBuilder();
$sc->register('context', 'SymfonyComponentRoutingRequestContext');
$sc->register('matcher', 'SymfonyComponentRoutingMatcherUrlMatcher')
->setArguments(array($routes, new Reference('context')));
$sc->register('framework', 'SimplexFramework')
->setArguments(array(new Reference('dispatcher'), new
Reference('resolver'))) ;
http://fabien.potencier.org/article/62/create-your-own-framework-on-top-of-the-symfony2-components-part-12
42. $kernel->boot()
For each bundle, the
container is injected and
the boot() method is
executed
48. RouterListener
// app/cache/dev/appdevUrlMatcher.php
class appdevUrlMatcher extends RedirectableUrlMatcher
{
...
public function match($pathinfo)
{
...
// _demo_hello
if (0 === strpos($pathinfo, '/demo/hello') &&
preg_match('#^/demo/hello/(?P<name>[^/]+?)$#s', $pathinfo, $m)) {
return array_merge($this->mergeDefaults($m, array(
'_controller' => 'AcmeDemoBundleControllerDemoController::helloAction')
), array( '_route' => '_demo_hello'));
}
...
}
53. FrameworkBundle
// app/console
#!/usr/bin/env php
<?php
require_once __DIR__.'/bootstrap.php.cache';
require_once __DIR__.'/AppKernel.php';
use SymfonyBundleFrameworkBundleConsoleApplication;
use SymfonyComponentConsoleInputArgvInput;
$input = new ArgvInput();
$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
$debug = !$input->hasParameterOption(array('--no-debug', ''));
$kernel = new AppKernel($env, $debug);
$application = new Application($kernel);
$application->run();
65. Response
Response
HTTP/1.1 200 OK
Headers Content-type: text/html
Date:Thu, 31 May 2012 17:54:50 GMT
Version
Content <!DOCTYPE HTML>
<html lang="es">
<head>
Status code
<meta charset="utf-8">
...
Status text
Charset
66. app[_dev].php
// web/app[_env].php
1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';
3. use SymfonyComponentHttpFoundationRequest;
4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();