<?php if (sfConfig::get('sf_environment') != 'dev'): ?>
<?php require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; sfCoreAutoload::register(); class ProjectConfiguration extends sfProjectConfiguration { } ?>
Permet de loader un yml dans le plugin avec la possibilité de l'overwritter s'il ce meme fichier est present dans l'application.
Dans /plugin/myPlugin/config faire un fichier config_handlers.yml
config/sfBBCodeParser.yml:
class: sfSimpleYamlConfigHandler
Donc ici, on va preparer une pre-compilation de ce fichier de config dans le cache, mais il ne sera pas inclut par défaut. Il faut donc l'apeller a partir du cache config des lors qu'on en a besoin.
/** * Test and include the default sfBBCodeParserPlugin config if it doesn't exists. * * @author loic.vernet * @since 30 july 08 * * @param Array $config */ function bb_check_and_include_config($config) { if (!$config) { // Include config file from generated cache $bb_config_file = include(sfContext::getInstance()->getConfigCache()->checkConfig(sfBBCodeParserConfig::getConfileFilePattern())); sfConfig::set(sfBBCodeParserConfig::getNamespace(), $bb_config_file); } return $config['config']; }
Ici j'ai ajouté une classe d'abstraction pour gérer la configuration du plugin.
Pour pointer vers un external symfony dans /lib/vendor par exemple.
$sf_symfony_lib_dir = dirname(__FILE__). '/../lib/vendor/symfony/lib'; $sf_symfony_data_dir = dirname(__FILE__). '/../lib/vendor/symfony/data';
in factories.yml file add a auto_start entry like this:
all:
storage:
param:
auto_start: false
$security = $this->getSecurityConfiguration();
fillin:
enabled: on
param:
id: seller_stockcreate_form
fields:
shop_product{quantity}:
required:
msg: Vous devez selectionner une quantité
itemQuantityValidator:
shop_product{price}:
required:
msg: Vous devez entrer un prix
shopProductPriceValidator:
# Inclusion de l'ensemble des validateurs definis pour le site
<?php include('validate/_validators.yml'); ?>
page: url: /:sf_culture/:page requirements: { sf_culture: (?:fr|en|de) } params: ...
methods:
post:
- "user_profile{login}"
- "user_profile{password}"
- "user_profile{check_password}"
- "user_profile{email}"
- "user_profile{civility}"
- "user_profile{first_name}"
- "user_profile{last_name}"
- "user_profile{birth_date}"
- "user_profile{address}"
- "user_profile{postal_code}"
- "user_profile{town}"
- "captcha"
- "user_profile{is_newsletter_subscribed}"
- "user_profile{is_partners_subscribed}"
- "user_profile{photo}"
- "user_profile{personal_url}"
fillin:
enabled: true
param:
name: form_register_member
names:
user_profile{login}:
required: Yes
required_msg: le login est obligatoire
validators: [usernameValidator, loginValidator]
user_profile{password}:
required: Yes
required_msg: le mot de passe est requis
validators: passwordValidator
user_profile{check_password}:
required: Yes
required_msg: La confirmation du mot de passe est obligatoire
validators: passwordValidator
user_profile{email}:
required: Yes
required_msg: l'email est obligatoire
validators: [emailValidator, mailuniqValidator]
user_profile{civility}:
required: Yes
required_msg: veuillez choisir votre civilité
user_profile{first_name}:
required: Yes
required_msg: le prénom est obligatoire
validators: usernameValidator
user_profile{last_name}:
required: Yes
required_msg: le nom est obligatoire
validators: usernameValidator
user_profile{birth_date}:
required: Yes
required_msg: le nom est obligatoire
validators: usernameValidator
user_profile{address}:
required: Yes
required_msg: l'adresse est obligatoire
user_profile{postal_code}:
required: Yes
required_msg: le code postal est obligatoire
validators: zipcodeValidator
user_profile{town}:
required: Yes
required_msg: la ville est obligatoire
captcha:
required: Yes
required_msg: vous devez recopier le code
validators: captchaValidator
user_profile{is_newsletter_subscribed}:
required: no
user_profile{is_partners_subscribed}:
required: no
user_profile{photo}:
required: no
user_profile{personal_url}:
required: no
passwordValidator:
class: sfCompareValidator
param:
check: passconf
compare_error: les mots de passe ne correspondent pas
loginValidator:
class: sfPropelUniqueValidator
param:
class: sfGuardUser
column: username
unique_error: ce login est déjà enregistré, choisissez en un autre.
mailuniqValidator:
class: sfPropelUniqueValidator
param:
class: UserProfile
column: email
unique_error: cet email est déjà enregistré, choisissez en un autre.
zipcodeValidator:
class: sfNumberValidator
nan_error: Veuillez n'entrer que des chiffres
min: 5
min_error: le code postal est au minimum composé de 5 chiffres
usernameValidator:
class: sfStringValidator
param:
min: 3
min_error: ce login doit être plus long
emailValidator:
class: sfEmailValidator
param:
email_error: l'adresse email n'est pas valide
captchaValidator:
class: captchaValidator
param:
error: vous devez recopier correctement le code de validation
methods: [post] # This is the default setting
fillin:
enabled: true
param:
name: send_page_to_friend_form
#skip_fields: [email] # Do not repopulate these fields
#exclude_types: [hidden, password] # Do not repopulate these field types
#check_types: [text, checkbox, radio, password, hidden] # Do repopulate these
validators:
myStringValidator:
class: sfStringValidator
param:
min: 2
min_error: This field is too short (2 characters minimum)
max: 100
max_error: This field is too long (100 characters maximum)
fields:
name:
required:
msg: The name field cannot be left blank
myStringValidator:
email:
required:
msg: The email field cannot be left blank
myStringValidator:
sfEmailValidator:
email_error: This email address is invalid
age:
sfNumberValidator
nan_error: Please enter an integer
min: 0
min_error: "You're not even born. How do you want to send a message?"
max: 120
max_error: "Hey, grandma, aren't you too old to surf on the Internet?"
message:
required:
msg: The message field cannot be left blank
require_once($sf_symfony_lib_dir.'/util/sfCore.class.php'); sfCore::initSimpleAutoload('/path/to/libs');
Désactiver les extensions de debug dans apache comme Xdebug ou APD
Installer la derniere version de PHP 5.x (pour la V1.0.0), pour la version Symfony 0.6.3 installer la derniere version 5.1.x
Mettre a off "magic_quotes_gpc" dans php.ini
Taille mémoire allouée minimum (328 mo) (memory_limit)
A downloader ici si pas dans la distrib php du server :
A ajouter dans php.ini : (au minimum)
Sour Windows pour tester en env de dev
extension=php_apc.dll
apc.enabled = 1
apc.enabled a mettre a 0 ou cas ou il y ai un pb.
Apres il y d'autres parametre qui peuvent etre affinés : (documentation : http://www.php.net/manual/en/ref.apc.php)
apc.shm_segments = 1 apc.shm_size = 30 apc.optimization = 0 apc.num_files_hint = 1000 apc.ttl = 0 apc.gc_ttl = 3600 apc.cache_by_default = 1 apc.filters = NULL apc.mmap_file_mask = NULL apc.slam_defens = 0 apc.file_update_protection = 2 apc.enable_cli = 0 apc.max_file_size = 1M apc.stat = 1
Eviter les requêtes inutiles
Mettre en place une politique de cache adéquate (voir doc)
.settings relative_url_root: /relative/path/to/symfony/app
imageliste:
name: Liste du catalogue
type: admin_input_upload_tag
upload_dir: dyn/produits
params:
include_link:dyn/produits
include_remove:true
include_text: Voir la photo liste du catalogue
include_remove_text:Supprimer la photo
sfConfig::set('sf_routing_defaults', array('culture' => 'en'));
all:
lucene:
index_path: %MY_CONSTANT%/data/lucene
image_path:
photos: %SF_WEB_DIR%/images/photos
avatars: %SF_WEB_DIR%/images/avatars
[Fr] Dans la doc j'ai trouvé la liste de fichier à exclure assez peu fournie. Voici une liste plus complète à personnaliser : (1)
[En] In the documentation i found the exclude file list quiet small. Here is a more consistant one to customize : (1)
.svn .CVS .project .settings .settings/* symfony /cache/* /config/config.php /config/propel.ini /config/databases.yml /config/properties.ini /doc/* /log/* /lib/symfony /lib/symfony/* /data/symfony /data/symfony/* /plugins/.channels/ /plugins/.registry/ /plugins/.depdb /plugins/.depdblock /plugins/.filemap /plugins/.lock /plugins/.pearrc /stats/* /test/* /web/.htaccess /web/frontend_dev.php /web/backend_dev.php /web/phpinfo.php /web/test.php /web/uploads/* /web/sf /web/sf/*
[EN] This is a typical .htaccess file for the french hoster OVH (1)
[FR] Voici un fichier .htaccess typique pour faire fonctionner une application Symfony sur un hébergement mutualisé OVH comme le 240gp.
(1)
SetEnv PHP_VER 5 SetEnv REGISTER_GLOBALS 0 SetEnv MAGIC_QUOTES 0 mod_gzip_on Off Options +FollowSymLinks +ExecCGI <IfModule mod_rewrite.c> RewriteEngine On # we skip all files with .something RewriteCond %{REQUEST_URI} \..+$ RewriteCond %{REQUEST_URI} !\.html$ RewriteCond %{REQUEST_URI} !\.php #RewriteCond %{REQUEST_URI} !\.php RewriteRule .* - [L] # we check if the .html version is here (caching) RewriteRule ^$ /index.html [QSA] RewriteRule ^([^.]+)$ /$1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f # no, so we redirect to our front web controller RewriteRule ^(.*)$ /index.php [QSA,L] # hidden frontoffice controller RewriteRule ^index\.php/(.*)$ /index.php [QSA,L] # fo controllers RewriteRule ^frontend\.php/(.*)$ /frontend.php [QSA,L] RewriteRule ^frontend_dev\.php/(.*)$ /frontend_dev.php [QSA,L] </IfModule> # big crash from our front web controller ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"
logs
8395.3 KB