Más contenido relacionado La actualidad más candente (20) Más de Javier Eguiluz (19) Curso Symfony - Clase 53. This work is licensed under a Creative Commons
Attribution‐Noncommercial‐Share Alike 3.0
The use of these slides in commercial courses or
trainings is explicitly prohibited
http://creativecommons.org/licenses/by‐nc‐sa/3.0/es/
5. Plugins
quot;forma de agrupar y distribuir un
subconjunto de archivos de tu proyecto quot;
• Clases • Tareas
• Helpers • Esquemas de datos
• Configuración • CSS
• Rutas • JavaScript
7. sfJobeetPlugin/
config/
• sfJobeetPluginConfiguration.class.php
• schema.yml
• routing.yml
modules/
job/
actions/
config/
templates/
19. plugins/sfJobeetPlugin/package.xml
<?xml version=quot;1.0quot; encoding=quot;UTF‐8quot;?>
<package packagerversion=quot;1.4.1quot; version=quot;2.0quot;
xmlns=quot;http://pear.php.net/dtd/package‐2.0quot;
xmlns:tasks=quot;http://pear.php.net/dtd/tasks‐1.0quot;
xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema‐instancequot;
xsi:schemaLocation=quot;http://pear.php.net/dtd/tasks‐1.0 http://pear.php.net/dtd/tasks‐1.0.xsd
http://pear.php.net/dtd/package‐2.0 http://pear.php.net/dtd/package‐2.0.xsdquot;
>
<name>sfJobeetPlugin</name>
<channel>plugins.symfony‐project.org</channel>
<summary>A job board plugin.</summary>
<description>A job board plugin.</description>
<lead>
<name>Fabien POTENCIER</name>
<user>fabpot</user>
<email>fabien.potencier@symfony‐project.com</email>
<active>yes</active>
</lead>
<date>2008‐12‐20</date>
...
22. plugins/sfJobeetPlugin/package.xml
<contents>
<dir name=quot;/quot;>
<file role=quot;dataquot; name=quot;READMEquot; />
<file role=quot;dataquot; name=quot;LICENSEquot; />
<dir name=quot;configquot;>
<file role=quot;dataquot; name=quot;config.phpquot; />
<file role=quot;dataquot; name=quot;schema.ymlquot; />
</dir>
<!‐‐ ... ‐‐>
</dir>
</contents>
23. plugins/sfJobeetPlugin/package.xml
<dependencies>
<required>
<php>
<min>5.0.0</min>
</php>
<pearinstaller>
<min>1.4.1</min>
</pearinstaller>
<package>
<name>symfony</name>
<channel>pear.symfony‐project.com</channel>
<min>1.2.0</min>
<max>1.3.0</max>
<exclude>1.3.0</exclude>
</package>
</required>
</dependencies>
24. plugins/sfJobeetPlugin/package.xml
<dependencies>
<required>
<php>
<min>5.0.0</min>
</php>
<pearinstaller>
<min>1.4.1</min>
</pearinstaller>
<package>
<name>symfony</name>
<channel>pear.symfony‐project.com</channel>
<min>1.2.0</min>
<max>1.3.0</max>
<exclude>1.3.0</exclude>
</package>
<package>
<name>sfFooPlugin</name>
<channel>plugins.symfony‐project.org</channel>
<min>1.0.0</min>
<max>1.2.0</max>
<exclude>1.2.0</exclude>
</package>
</required>
</dependencies>
25. plugins/sfJobeetPlugin/package.xml
<changelog>
<release>
<version>
<release>1.0.0</release>
<api>1.0.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri=quot;http://www.symfony‐project.com/licensequot;>
MIT license
</license>
<date>2008‐12‐20</date>
<license>MIT</license>
<notes>
* fabien: First release of the plugin
</notes>
</release>
</changelog>
57. plugins/sfJobeetJob/modules/sfJobeetLanguage/actions/components.class.php
class sfJobeetLanguageComponents extends sfComponents {
public function executeLanguage(sfWebRequest $request) {
$this‐>form = new sfFormLanguage(
$this‐>getUser(),
array('languages' => array('en', 'fr'))
);
unset($this‐>form[$this‐>form‐>getCSRFFieldName()]);
}
}
plugins/sfJobeetJob/modules/sfJobeetLanguage/actions/actions.class.php
class sfJobeetLanguageActions extends sfActions {
public function executeChangeLanguage(sfWebRequest $request) {
$form = new sfFormLanguage(
$this‐>getUser(),
array('languages' => array('en', 'fr'))
);
unset($form[$this‐>form‐>getCSRFFieldName()]);
}
}
58. plugins/sfJobeetJob/modules/sfJobeetJob/config/cache.yml
index:
enabled: on
lifetime: 600
plugins/sfJobeetJob/modules/sfJobeetJob/actions/actions.class.php
public function executePublish(sfWebRequest $request) {
...
if ($cache = $this‐>getContext()‐>getViewCacheManager())
{
$cache‐>remove('sfJobeetJob/index?sf_culture=*');
$cache‐>remove('sfJobeetCategory/show?id='.
$job‐>getJobeetCategory()‐>getId());
}
...
}
59. sfContext::getInstance()‐>
getRouting() getRequest()
getResponse() getController()
getStorage() getConfiguration()
getUser() getI18N()
getLogger() getDatabaseConnection()
http://www.symfony‐project.org/api/1_2/sfContext
66. bytecode
Con acelerador
cache
Primera ejecución
código ejecutar
parsear compilar
fuente
Siguientes ejecuciones
bytecode
cache
67. 1. Instalar ($ pecl install APC)
2. Configurar:
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 30
apc.stat = 1
3. Reiniciar Apache
70. Archivo comprimido (symfony‐1.2.4.tgz)
Eliminar archivos anteriores de lib/vendor/
1.
Descomprimir el archivo en lib/vendor/
2.
Subversion
$ svn propedit svn:externals lib/vendor/
# symfony http://svn.symfony‐project.com/tags/RELEASE_1_2_1/
# symfony http://svn.symfony‐project.com/branches/1.2
71. lib/vendor/
symfony/
symfony_test/
config/ProjectConfiguration.class.php
require_once dirname(__FILE__).
'/../lib/vendor/'.
'symfony_test/lib/autoload/'.
'sfCoreAutoload.class.php';
79. apps/frontend/config/factories.yml
request:
class: sfWebRequest
param:
logging: %SF_LOGGING_ENABLED%
path_info_array: SERVER
path_info_key: PATH_INFO
relative_url_root: ~
formats:
txt: text/plain
js: [application/javascript,
application/x‐javascript,
text/javascript]
css: text/css
json: [application/json, application/x‐json]
xml: [text/xml, application/xml, application/x‐xml]
rdf: application/rdf+xml
atom: application/atom+xml
87. config/properties.ini
[production]
host=www.jobeet.org
port=22
user=jobeet
dir=/var/www/jobeet/
type=rsync
pass=
$ ./symfony project:deploy production
SSH + rsync
90. • ¿Qué es Symfony? • Seguridad
• El modelo • Formularios
• La vista • i18n y l10n
• El controlador • Pruebas
• Configuración • Plugins
• Depuración • Tareas
• Objetos