componentes, el arma secreta de symfony2
TRANSCRIPT
![Page 1: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/1.jpg)
Javier López | @loalf#deSymfony
domingo 17 de junio de 12
![Page 2: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/2.jpg)
Javier López | @loalf#deSymfony
domingo 17 de junio de 12
![Page 3: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/3.jpg)
Javier López
Nací en Córdoba, España.
Vivo en Londres, Reino Unido.
Trabajo en IPC Media (http://ipcmedia.com).
Escribo (a veces) en mi blog (http://loalf.wordpress.com).
Twitteo como @loalf
... ¿quiéres saber más? http://www.linkedin.com/in/loalf
domingo 17 de junio de 12
![Page 4: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/4.jpg)
Los componentes
domingo 17 de junio de 12
![Page 5: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/5.jpg)
http://fabien.potencier.org/article/49/what-is-symfony2
domingo 17 de junio de 12
![Page 6: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/6.jpg)
Son un conjunto de librerías autónomas,
desacopladas y complementarias que resuelven
problemas comunes del desarrollo web
domingo 17 de junio de 12
![Page 7: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/7.jpg)
22 Componentes
Browserkit
EventDispatcher
RoutingClassLoader
Finder
Security
Config
Form
Serializer
Console
HttpFoundation
Templating
CssSelector
HttpKernelTranslation
Locale
DependencyInjection
Validator
DomCrawler
ProcessYaml
Filesystem
domingo 17 de junio de 12
![Page 8: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/8.jpg)
22 Componentes
Browserkit
EventDispatcher
RoutingClassLoader
Finder
Security
Config
Form
Serializer
Console
HttpFoundation
Templating
CssSelector
HttpKernelTranslation
Locale
DependencyInjection
Validator
DomCrawler
ProcessYaml
Filesystem
domingo 17 de junio de 12
![Page 9: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/9.jpg)
Instalación
domingo 17 de junio de 12
![Page 10: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/10.jpg)
mkdir ComponentsPlayground
cd ComponentsPlayground
mkdir vendor
cd vendor
git clone https://github.com/symfony/symfony
domingo 17 de junio de 12
![Page 11: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/11.jpg)
<?php
require_once __DIR__.'/vendor/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
use Symfony\Component\ClassLoader\UniversalClassLoader;
$loader = new UniversalClassLoader();$loader->registerNamespaces(array( 'Symfony' => __DIR__.'/vendor/symfony/src',));
$loader->register();
autoload.php
domingo 17 de junio de 12
![Page 12: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/12.jpg)
<?php
require_once 'autoload.php';
/*
* Código del ejemplo
*/
ejemplo.php
> php ejemplo.php
domingo 17 de junio de 12
![Page 13: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/13.jpg)
Yaml
domingo 17 de junio de 12
![Page 14: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/14.jpg)
Parsea y genera archivos yml
domingo 17 de junio de 12
![Page 15: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/15.jpg)
#example.yml
descripcion: “Usuarios de symfony”usuarios: - nombre: “Javi” apellidos: “López” - nombre: “Raúl” apellidos: “Fraile”
use Symfony\Component\Yaml\Yaml;
$data = Yaml::parse('example.yml');
print $data['descripcion'];
foreach( $data['usuarios'] as $usuario){ print $usuario['nombre'].' '. $usuario['apellidos'];}
parseando archivos YAML
domingo 17 de junio de 12
![Page 16: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/16.jpg)
descripcion: “Usuarios de symfony”usuarios: 0: nombre: “Javi” apellidos: “López” 1: nombre: “Raúl” apellidos: “Fraile”
use Symfony\Component\Yaml\Yaml;
$data['descripcion'] = "Usuarios de symfony";
$data['usuarios'][] = array( 'nombre' => 'Javi', 'apellidos' => 'Lopez' );
$data['usuarios'][] = array( 'nombre' => 'Raul', 'apellidos' => 'Fraile' );
print Yaml::dump($data);
generando archivos YAML
domingo 17 de junio de 12
![Page 17: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/17.jpg)
#example.yml
generado: <?php echo date(‘d-m-Y’); ?>descripcion: “Usuarios de symfony”usuarios: javi: nombre: “Javi” apellidos: “López” raul: nombre: “Raúl” apellidos: “Fraile”
use Symfony\Component\Yaml\Yaml;
Yaml::enablePhpParsing();
$data = Yaml::parse('example.yml');
print $data['generado'];
YAML & PHP
domingo 17 de junio de 12
![Page 18: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/18.jpg)
Finder
domingo 17 de junio de 12
![Page 19: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/19.jpg)
Herramienta para encontrar archivos y directorios
domingo 17 de junio de 12
![Page 20: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/20.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->name("*.php")
->name("*.{php,yml}")
->name("/\.(php|yml)$/")
->name("/^\w{3,10}$/")
->name("foo.php")
->in(__DIR__);
buscando archivos por nombre
Referencia sobre Patrones Glob: http://cowburn.info/2010/04/30/glob-patterns/
domingo 17 de junio de 12
![Page 21: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/21.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->size("> 10k")
->size("<= 4mi")
->size("2gi")
->in(__DIR__);
buscando archivos por tamaño
k = 1000m = 1000^2g = 1000^3
ki = 1024mi = 1024^2gi = 1024^3
domingo 17 de junio de 12
![Page 22: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/22.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->date("since yesterday")
->date("until 2 days ago")
->date("> now - 2 hours")
->date(">= 2005-10-15 ")
->in(__DIR__);
buscando archivos por fecha
Parámetro es cualquier argumento válido para strtotime()
domingo 17 de junio de 12
![Page 23: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/23.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->depth(0)
->depth(>1)
->depth(<3)
->in(__DIR__);
fijando el nivel de profundidad
domingo 17 de junio de 12
![Page 24: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/24.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->files()
->in(__DIR__);
buscando sólo archivos
domingo 17 de junio de 12
![Page 25: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/25.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->directories()
->in(__DIR__);
buscando sólo directorios
domingo 17 de junio de 12
![Page 26: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/26.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->sortByName()
->sortByType()
->sort( function(\SplFileInfo $file1, \SplFileInfo $file2){ return $file1->getSize() > $file2->getSize(); } ) ->in(__DIR__);
obteniendo un resultado ordenado
domingo 17 de junio de 12
![Page 27: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/27.jpg)
use Symfony\Component\Finder\Finder;
$files = Finder::create()
->files()
->depth(0)
->name("*.php")
->in(__DIR__);
archivos php en la carpeta raíz del proyecto
domingo 17 de junio de 12
![Page 28: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/28.jpg)
Process
domingo 17 de junio de 12
![Page 29: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/29.jpg)
Facilita la ejecución de comandos del sistema
domingo 17 de junio de 12
![Page 30: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/30.jpg)
use Symfony\Component\Process\Process;
$process = new Process('ping -c 1 twitter.com');
$process->run();
if($process->isSuccessful()){
print "Twitter esta online";
}else{
print "Twitter esta offline";
}
¿está Twitter online?
domingo 17 de junio de 12
![Page 31: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/31.jpg)
ping -c 4 twitter.com
domingo 17 de junio de 12
![Page 32: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/32.jpg)
$process = new Process('ping -c 4 twitter.com');
$process->run();
if($process->isSuccessful())
{
$output = $process->getOutput();
$pattern = '/time=(\d+\.\d+) ms/';
preg_match_all($pattern, $output, $matches);
$average = array_sum($matches[1])/count($matches[1]);
printf("Avergage time=%.3f ms", $average);
}else{
print "Twitter está offline";
}
calculando tiempos medios de respuesta
domingo 17 de junio de 12
![Page 33: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/33.jpg)
Validator
domingo 17 de junio de 12
![Page 34: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/34.jpg)
Ayuda a validar tanto variables como objetos
domingo 17 de junio de 12
![Page 35: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/35.jpg)
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\NotNullValidator;
$validator = new NotNullValidator();
if(!$validator->isValid(null, new NotNull()))
{
print $validator->getMessageTemplate();
// "The value should not be null"
}
Validando que un valor sea no nulo
domingo 17 de junio de 12
![Page 36: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/36.jpg)
24 ValidadoresBlank Max
MinNotBlank
Null
Date
DateTime
True
False
NotNull
Time
Country
Language
Collection
Locale
Url
Image
IP
File
Choice
CallbackSizeType
domingo 17 de junio de 12
![Page 37: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/37.jpg)
use Symfony\Component\Validator\Validator;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Mapping\BlackholeMetadataFactory;
use Symfony\Component\Validator\Constraints as Asserts;
$validator = new Validator(
new BlackholeMetadataFactory,
new ConstraintValidatorFactory
);
$errors = $validator->validateValue('', new Asserts\NotBlank());
if($errors->count())
{
print $errors;
}
Usando la clase Validator
ConstraintViolationList
domingo 17 de junio de 12
![Page 38: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/38.jpg)
class Person
{
public $name;
public $age;
}
Validando un objeto (PHP)
$name no puede ser una cadena vacía $age deberán ser un número comprendido entre 18 y 99 años
domingo 17 de junio de 12
![Page 39: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/39.jpg)
use Symfony\Component\Validator\Validator;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
$validator = new Validator(
new ClassMetadataFactory(new StaticMethodLoader() ),
new ConstraintValidatorFactory()
);
$person = new Person();
$errors = $validator->validate($person);
Validando un objeto (PHP)
domingo 17 de junio de 12
![Page 40: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/40.jpg)
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraint as Asserts;
class Person
{
public $name;
public $age;
static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata
->addPropertyConstraint('name', new Asserts\NotBlank())
->addPropertyConstraint('age' , new Asserts\Min(18));
->addPropertyConstraint('age' , new Asserts\Max(99));
}
}
Validando un objeto (PHP)
domingo 17 de junio de 12
![Page 41: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/41.jpg)
class Person
{
public $name;
public $age;
}
Validando un objeto (YAML)
$name no puede ser una cadena vacía $age deberán ser un número comprendido entre 18 y 99 años
domingo 17 de junio de 12
![Page 42: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/42.jpg)
# validate.yml
Person:
properties:
name:
- NotBlank : ~
age:
- Min: 18
- Max: 99
Validando un objeto (YAML)
domingo 17 de junio de 12
![Page 43: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/43.jpg)
use Symfony\Component\Validator\Validator;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
$validator = new Validator(
new ClassMetadataFactory(
new YamlFileLoader(__DIR__.'/validate.yml')
),
new ConstraintValidatorFactory()
);
$person = new Person();
$errors = $validator->validate($person);
Validando un objeto (YAML)
domingo 17 de junio de 12
![Page 44: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/44.jpg)
Serializer
domingo 17 de junio de 12
![Page 45: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/45.jpg)
Cuando todo es un array
domingo 17 de junio de 12
![Page 46: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/46.jpg)
Formato (JSON, XML)
Array
Objeto
normalizedenormalize
encodedecode
serializedeserialize
domingo 17 de junio de 12
![Page 47: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/47.jpg)
class Person{ private $age; private $name;
public function getName() { return $this->name; } public function getAge() { return $this->age; } public function setName($name) { $this->name = $name; } public function setAge($age) { $this->age = $age; }}
Serializando un objeto
domingo 17 de junio de 12
![Page 48: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/48.jpg)
use Symfony\Component\Serializer\Serializer;use Symfony\Component\Serializer\Encoder\XmlEncoder;use Symfony\Component\Serializer\Encoder\JsonEncoder;use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
$person = new Person(19, 'Javi');
$encoders = array(new XmlEncoder(), new JsonEncoder() );
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$serializer->serialize($person, 'json');// {"name":"Javi","age":19}
Serializando un objeto
domingo 17 de junio de 12
![Page 49: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/49.jpg)
data = <<<EOF<person> <name>Javi</name> <age>19</age></person>EOF;
$person = $serializer->deserialize($data,'Person','xml');
Deserializando un objeto
domingo 17 de junio de 12
![Page 50: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/50.jpg)
Console
domingo 17 de junio de 12
![Page 51: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/51.jpg)
Facilita la creación de tareas repetitivas
domingo 17 de junio de 12
![Page 52: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/52.jpg)
// console.php
use Symfony\Component\Console\Application;
$console = new Application();
$console->run();
La consola más sencilla
domingo 17 de junio de 12
![Page 53: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/53.jpg)
php console.php
domingo 17 de junio de 12
![Page 54: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/54.jpg)
php console.php help
domingo 17 de junio de 12
![Page 55: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/55.jpg)
php console.php help list
domingo 17 de junio de 12
![Page 56: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/56.jpg)
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputArgument;
$console = new Application();
$console
->register('hello')
->setDefinition(array(
new InputArgument('name', InputArgument::REQUIRED, 'Nombre'),
))
->setDescription('Saluda a una persona')
->setCode(function ($input, $output) {
$name = $input->getArgument('name');
$output->writeln(sprintf('Hola <info>%s</info>', $name));
})
;
$console->run();
Hola mundo ... para consolas
domingo 17 de junio de 12
![Page 57: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/57.jpg)
Hay una manera mejor de hacerlo, Command
domingo 17 de junio de 12
![Page 58: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/58.jpg)
use Symfony\Component\Console\Command\Command;use Symfony\Component\Console\Input\InputArgument;
class HelloCommand extends Command{ public function configure() { $this->setName('hello'); $this->setDefinition(array( new InputArgument('name', InputArgument::REQUIRED, 'Nombre'), )) $this->setDescription('Saluda a una persona') }
public function execute($input, $output) { $name = $input->getArgument('name'); $output->writeln(sprintf('Hola <info>%s</info>', $name)); }}
Creando un nuevo comando
domingo 17 de junio de 12
![Page 59: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/59.jpg)
use Symfony\Component\Console\Application;
$console = new Application();
$console->add(new HelloCommand());
$console->run();
Creando un nuevo comando
domingo 17 de junio de 12
![Page 60: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/60.jpg)
Antes de irme
domingo 17 de junio de 12
![Page 61: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/61.jpg)
Divide y vencerás
domingo 17 de junio de 12
![Page 62: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/62.jpg)
Los tests son una excelente documentación
domingo 17 de junio de 12
![Page 63: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/63.jpg)
Check it out!http://github.com:loalf/Sf2ComponentsPlayground.git
domingo 17 de junio de 12
![Page 64: Componentes, el arma secreta de Symfony2](https://reader034.vdocuments.net/reader034/viewer/2022052316/5588fcf6d8b42a4a1a8b4747/html5/thumbnails/64.jpg)
Gracias@loalf
Créditos: http://www.flickr.com/photos/normalityrelief/3075723695/
IPC Media está reclutando, búscame si estás pensando en mudarte a Londres
domingo 17 de junio de 12