├── .gitignore ├── .gitmodules ├── .travis.yml ├── CONTRIBUTING.md ├── Makefile ├── README.markdown ├── book ├── controller.rst ├── doctrine.rst ├── forms.rst ├── from_flat_php_to_symfony2.rst ├── http_cache.rst ├── http_fundamentals.rst ├── index.rst ├── installation.rst ├── internals.rst ├── map.rst.inc ├── page_creation.rst ├── performance.rst ├── propel.rst ├── routing.rst ├── security.rst ├── service_container.rst ├── stable_api.rst ├── templating.rst ├── testing.rst ├── translation.rst └── validation.rst ├── bundles ├── DoctrineFixturesBundle │ └── index.rst ├── DoctrineMigrationsBundle │ └── index.rst ├── DoctrineMongoDBBundle │ ├── config.rst │ ├── form.rst │ └── index.rst ├── SensioFrameworkExtraBundle │ ├── annotations │ │ ├── cache.rst │ │ ├── converters.rst │ │ ├── routing.rst │ │ └── view.rst │ └── index.rst ├── SensioGeneratorBundle │ ├── commands │ │ ├── generate_bundle.rst │ │ ├── generate_doctrine_crud.rst │ │ ├── generate_doctrine_entity.rst │ │ └── generate_doctrine_form.rst │ └── index.rst ├── index.rst └── map.rst.inc ├── cmf └── index.rst ├── components ├── class_loader.rst ├── config │ ├── caching.rst │ ├── definition.rst │ ├── index.rst │ ├── introduction.rst │ └── resources.rst ├── console │ ├── changing_default_command.rst │ ├── events.rst │ ├── helpers │ │ ├── dialoghelper.rst │ │ ├── formatterhelper.rst │ │ ├── index.rst │ │ ├── map.rst.inc │ │ ├── progresshelper.rst │ │ └── tablehelper.rst │ ├── index.rst │ ├── introduction.rst │ ├── single_command_tool.rst │ └── usage.rst ├── css_selector.rst ├── debug │ ├── class_loader.rst │ ├── index.rst │ └── introduction.rst ├── dependency_injection │ ├── advanced.rst │ ├── compilation.rst │ ├── configurators.rst │ ├── definitions.rst │ ├── factories.rst │ ├── index.rst │ ├── introduction.rst │ ├── lazy_services.rst │ ├── parameters.rst │ ├── parentservices.rst │ ├── tags.rst │ ├── types.rst │ └── workflow.rst ├── dom_crawler.rst ├── event_dispatcher │ ├── container_aware_dispatcher.rst │ ├── generic_event.rst │ ├── index.rst │ └── introduction.rst ├── expression_language │ ├── caching.rst │ ├── extending.rst │ ├── index.rst │ ├── introduction.rst │ └── syntax.rst ├── filesystem.rst ├── finder.rst ├── form │ ├── index.rst │ ├── introduction.rst │ └── type_guesser.rst ├── http_foundation │ ├── index.rst │ ├── introduction.rst │ ├── session_configuration.rst │ ├── session_php_bridge.rst │ ├── session_testing.rst │ ├── sessions.rst │ └── trusting_proxies.rst ├── http_kernel │ ├── index.rst │ └── introduction.rst ├── index.rst ├── locale.rst ├── map.rst.inc ├── process.rst ├── property_access │ ├── index.rst │ └── introduction.rst ├── routing │ ├── hostname_pattern.rst │ ├── index.rst │ └── introduction.rst ├── security │ ├── authentication.rst │ ├── authorization.rst │ ├── firewall.rst │ ├── index.rst │ └── introduction.rst ├── serializer.rst ├── templating.rst ├── using_components.rst └── yaml │ ├── index.rst │ ├── introduction.rst │ └── yaml_format.rst ├── conf.py ├── contributing ├── code │ ├── bugs.rst │ ├── conventions.rst │ ├── index.rst │ ├── license.rst │ ├── patches.rst │ ├── security.rst │ ├── standards.rst │ └── tests.rst ├── community │ ├── index.rst │ ├── irc.rst │ ├── other.rst │ └── releases.rst ├── documentation │ ├── format.rst │ ├── index.rst │ ├── license.rst │ ├── overview.rst │ └── translations.rst ├── index.rst └── map.rst.inc ├── cookbook ├── assetic │ ├── apply_to_option.rst │ ├── asset_management.rst │ ├── index.rst │ ├── jpeg_optimize.rst │ └── yuicompressor.rst ├── bundles │ ├── best_practices.rst │ ├── extension.rst │ ├── index.rst │ ├── inheritance.rst │ ├── override.rst │ └── remove.rst ├── cache │ ├── index.rst │ └── varnish.rst ├── configuration │ ├── apache_router.rst │ ├── environments.rst │ ├── external_parameters.rst │ ├── index.rst │ ├── override_dir_structure.rst │ ├── pdo_session_storage.rst │ └── web_server_configuration.rst ├── console │ ├── console_command.rst │ ├── index.rst │ ├── logging.rst │ ├── sending_emails.rst │ └── usage.rst ├── controller │ ├── error_pages.rst │ ├── index.rst │ └── service.rst ├── debugging.rst ├── deployment_tools.rst ├── doctrine │ ├── common_extensions.rst │ ├── custom_dql_functions.rst │ ├── dbal.rst │ ├── event_listeners_subscribers.rst │ ├── file_uploads.rst │ ├── index.rst │ ├── multiple_entity_managers.rst │ ├── registration_form.rst │ ├── resolve_target_entity.rst │ └── reverse_engineering.rst ├── email │ ├── dev_environment.rst │ ├── email.rst │ ├── gmail.rst │ ├── index.rst │ └── spool.rst ├── event_dispatcher │ ├── before_after_filters.rst │ ├── class_extension.rst │ ├── index.rst │ └── method_behavior.rst ├── form │ ├── create_custom_field_type.rst │ ├── create_form_type_extension.rst │ ├── data_transformers.rst │ ├── direct_submit.rst │ ├── dynamic_form_modification.rst │ ├── form_collections.rst │ ├── form_customization.rst │ ├── index.rst │ ├── inherit_data_option.rst │ ├── unit_testing.rst │ ├── use_empty_data.rst │ └── use_virtuals_forms.rst ├── index.rst ├── logging │ ├── channels_handlers.rst │ ├── index.rst │ ├── monolog.rst │ └── monolog_email.rst ├── map.rst.inc ├── profiler │ ├── data_collector.rst │ └── index.rst ├── request │ ├── index.rst │ └── mime_type.rst ├── routing │ ├── custom_route_loader.rst │ ├── index.rst │ ├── method_parameters.rst │ ├── redirect_in_config.rst │ ├── redirect_trailing_slash.rst │ ├── scheme.rst │ ├── service_container_parameters.rst │ └── slash_in_parameter.rst ├── security │ ├── acl.rst │ ├── acl_advanced.rst │ ├── custom_authentication_provider.rst │ ├── custom_provider.rst │ ├── entity_provider.rst │ ├── force_https.rst │ ├── form_login.rst │ ├── index.rst │ ├── remember_me.rst │ ├── securing_services.rst │ ├── target_path.rst │ └── voters.rst ├── serializer.rst ├── service_container │ ├── compiler_passes.rst │ ├── event_listener.rst │ ├── index.rst │ └── scopes.rst ├── session │ ├── index.rst │ ├── limit_metadata_writes.rst │ ├── locale_sticky_session.rst │ ├── php_bridge.rst │ ├── proxy_examples.rst │ └── sessions_directory.rst ├── symfony1.rst ├── templating │ ├── PHP.rst │ ├── global_variables.rst │ ├── index.rst │ ├── namespaced_paths.rst │ ├── render_without_controller.rst │ └── twig_extension.rst ├── testing │ ├── bootstrap.rst │ ├── database.rst │ ├── doctrine.rst │ ├── http_authentication.rst │ ├── index.rst │ ├── insulating_clients.rst │ ├── profiling.rst │ └── simulating_authentication.rst ├── validation │ ├── custom_constraint.rst │ └── index.rst ├── web_services │ ├── index.rst │ └── php_soap_extension.rst └── workflow │ ├── _vendor_deps.rst.inc │ ├── index.rst │ ├── new_project_git.rst │ └── new_project_svn.rst ├── glossary.rst ├── images ├── book │ ├── doctrine_image_1.png │ ├── doctrine_image_2.png │ ├── doctrine_image_3.png │ ├── doctrine_web_debug_toolbar.png │ ├── form-simple.png │ ├── form-simple2.png │ ├── security_admin_role_access.png │ ├── security_anonymous_user_access.png │ ├── security_anonymous_user_denied_authorization.png │ ├── security_authentication_authorization.png │ ├── security_full_step_authorization.png │ └── security_ryan_no_role_admin_access.png ├── components │ ├── console │ │ ├── progress.png │ │ └── table.png │ ├── http_kernel │ │ ├── 01-workflow.png │ │ ├── 02-kernel-request.png │ │ ├── 03-kernel-request-response.png │ │ ├── 04-resolve-controller.png │ │ ├── 06-kernel-controller.png │ │ ├── 07-controller-arguments.png │ │ ├── 08-call-controller.png │ │ ├── 09-controller-returns-response.png │ │ ├── 10-kernel-view.png │ │ ├── 11-kernel-exception.png │ │ ├── request-response-flow.png │ │ └── sub-request.png │ └── serializer │ │ └── serializer_workflow.png ├── docs-pull-request-change-base.png ├── docs-pull-request.png ├── http-xkcd-request.png ├── http-xkcd.png ├── quick_tour │ ├── hello_fabien.png │ ├── profiler.png │ ├── web_debug_toolbar.png │ └── welcome.png ├── release-process.jpg └── request-flow.png ├── index.rst ├── install.sh ├── quick_tour ├── index.rst ├── the_architecture.rst ├── the_big_picture.rst ├── the_controller.rst └── the_view.rst ├── redirection_map ├── reference ├── configuration │ ├── assetic.rst │ ├── doctrine.rst │ ├── framework.rst │ ├── kernel.rst │ ├── monolog.rst │ ├── security.rst │ ├── swiftmailer.rst │ ├── twig.rst │ └── web_profiler.rst ├── constraints.rst ├── constraints │ ├── All.rst │ ├── Blank.rst │ ├── Callback.rst │ ├── CardScheme.rst │ ├── Choice.rst │ ├── Collection.rst │ ├── Count.rst │ ├── Country.rst │ ├── Currency.rst │ ├── Date.rst │ ├── DateTime.rst │ ├── Email.rst │ ├── EqualTo.rst │ ├── False.rst │ ├── File.rst │ ├── GreaterThan.rst │ ├── GreaterThanOrEqual.rst │ ├── Iban.rst │ ├── IdenticalTo.rst │ ├── Image.rst │ ├── Ip.rst │ ├── Isbn.rst │ ├── Issn.rst │ ├── Language.rst │ ├── Length.rst │ ├── LessThan.rst │ ├── LessThanOrEqual.rst │ ├── Locale.rst │ ├── Luhn.rst │ ├── NotBlank.rst │ ├── NotEqualTo.rst │ ├── NotIdenticalTo.rst │ ├── NotNull.rst │ ├── Null.rst │ ├── Range.rst │ ├── Regex.rst │ ├── Time.rst │ ├── True.rst │ ├── Type.rst │ ├── UniqueEntity.rst │ ├── Url.rst │ ├── UserPassword.rst │ ├── Valid.rst │ ├── _comparison-value-option.rst.inc │ └── map.rst.inc ├── dic_tags.rst ├── forms │ ├── twig_reference.rst │ ├── types.rst │ └── types │ │ ├── birthday.rst │ │ ├── button.rst │ │ ├── checkbox.rst │ │ ├── choice.rst │ │ ├── collection.rst │ │ ├── country.rst │ │ ├── currency.rst │ │ ├── date.rst │ │ ├── datetime.rst │ │ ├── email.rst │ │ ├── entity.rst │ │ ├── file.rst │ │ ├── form.rst │ │ ├── hidden.rst │ │ ├── integer.rst │ │ ├── language.rst │ │ ├── locale.rst │ │ ├── map.rst.inc │ │ ├── money.rst │ │ ├── number.rst │ │ ├── options │ │ ├── _date_limitation.rst.inc │ │ ├── _error_bubbling_body.rst.inc │ │ ├── attr.rst.inc │ │ ├── block_name.rst.inc │ │ ├── button_attr.rst.inc │ │ ├── button_auto_initialize.rst.inc │ │ ├── button_disabled.rst.inc │ │ ├── button_label.rst.inc │ │ ├── button_translation_domain.rst.inc │ │ ├── by_reference.rst.inc │ │ ├── cascade_validation.rst.inc │ │ ├── compound.rst.inc │ │ ├── constraints.rst.inc │ │ ├── data.rst.inc │ │ ├── data_class.rst.inc │ │ ├── data_timezone.rst.inc │ │ ├── date_format.rst.inc │ │ ├── date_input.rst.inc │ │ ├── date_widget.rst.inc │ │ ├── days.rst.inc │ │ ├── disabled.rst.inc │ │ ├── empty_data.rst.inc │ │ ├── empty_value.rst.inc │ │ ├── error_bubbling.rst.inc │ │ ├── error_mapping.rst.inc │ │ ├── expanded.rst.inc │ │ ├── extra_fields_message.rst.inc │ │ ├── grouping.rst.inc │ │ ├── hours.rst.inc │ │ ├── inherit_data.rst.inc │ │ ├── invalid_message.rst.inc │ │ ├── invalid_message_parameters.rst.inc │ │ ├── label.rst.inc │ │ ├── label_attr.rst.inc │ │ ├── mapped.rst.inc │ │ ├── max_length.rst.inc │ │ ├── minutes.rst.inc │ │ ├── model_timezone.rst.inc │ │ ├── months.rst.inc │ │ ├── multiple.rst.inc │ │ ├── pattern.rst.inc │ │ ├── post_max_size_message.rst.inc │ │ ├── precision.rst.inc │ │ ├── preferred_choices.rst.inc │ │ ├── property_path.rst.inc │ │ ├── read_only.rst.inc │ │ ├── required.rst.inc │ │ ├── seconds.rst.inc │ │ ├── select_how_rendered.rst.inc │ │ ├── translation_domain.rst.inc │ │ ├── trim.rst.inc │ │ ├── user_timezone.rst.inc │ │ ├── view_timezone.rst.inc │ │ ├── with_minutes.rst.inc │ │ ├── with_seconds.rst.inc │ │ └── years.rst.inc │ │ ├── password.rst │ │ ├── percent.rst │ │ ├── radio.rst │ │ ├── repeated.rst │ │ ├── reset.rst │ │ ├── search.rst │ │ ├── submit.rst │ │ ├── text.rst │ │ ├── textarea.rst │ │ ├── time.rst │ │ ├── timezone.rst │ │ └── url.rst ├── index.rst ├── map.rst.inc ├── requirements.rst └── twig_reference.rst └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | /_build 2 | /cmf -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "_exts"] 2 | path = _exts 3 | url = http://github.com/fabpot/sphinx-php 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | python: 4 | - "2.7" 5 | 6 | install: 7 | - "bash install.sh" 8 | - "pip install -q -r requirements.txt --use-mirrors" 9 | 10 | script: sphinx-build -nW -b html -d _build/doctrees . _build/html -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contribution 2 | ------------ 3 | 4 | **Nous adorons les contributeurs !** 5 | 6 | Pour contribuer, vous devez faire une Pull-Request sur la branche **master** qui est la seule maintenue (dans un soucis d'efficacité, nous ne pouvons pas maintenir les miroirs de toutes les branches de la documentation officielle de Symfony). 7 | 8 | [Liste des contributeurs](https://github.com/symfony-fr/symfony-docs-fr/graphs/contributors) 9 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | Documentation de Symfony 2 | ======================== 3 | 4 | Attention, cette documentation n'est plus à jour et le dépot n'est plus maintenu. 5 | La seule documentation officielle et à jour est celle en anglais, disponible sur symfony.com. 6 | 7 | Merci à celles et ceux qui ont contribué à maintenir ce dépot à jour pendant plusieurs années. 8 | 9 | Contribuer 10 | ---------- 11 | 12 | Merci de lire la page d'[informations sur les contributions](CONTRIBUTING.md). 13 | 14 | Discuter de la documentation 15 | ---------------------------- 16 | 17 | Vous pouvez nous contacter sur IRC à l'adresse suivante: #symfony-fr-docs@irc.freenode.net 18 | -------------------------------------------------------------------------------- /book/index.rst: -------------------------------------------------------------------------------- 1 | Le Book 2 | ======= 3 | 4 | .. toctree:: 5 | :hidden: 6 | 7 | http_fundamentals 8 | from_flat_php_to_symfony2 9 | installation 10 | page_creation 11 | controller 12 | routing 13 | templating 14 | doctrine 15 | propel 16 | testing 17 | validation 18 | forms 19 | security 20 | http_cache 21 | translation 22 | service_container 23 | performance 24 | internals 25 | stable_api 26 | 27 | .. include:: /book/map.rst.inc -------------------------------------------------------------------------------- /book/map.rst.inc: -------------------------------------------------------------------------------- 1 | * :doc:`/book/http_fundamentals` 2 | * :doc:`/book/from_flat_php_to_symfony2` 3 | * :doc:`/book/installation` 4 | * :doc:`/book/page_creation` 5 | * :doc:`/book/controller` 6 | * :doc:`/book/routing` 7 | * :doc:`/book/templating` 8 | * :doc:`/book/doctrine` 9 | * :doc:`/book/propel` 10 | * :doc:`/book/testing` 11 | * :doc:`/book/validation` 12 | * :doc:`/book/forms` 13 | * :doc:`/book/security` 14 | * :doc:`/book/http_cache` 15 | * :doc:`/book/translation` 16 | * :doc:`/book/service_container` 17 | * :doc:`/book/performance` 18 | * :doc:`/book/internals` 19 | * :doc:`/book/stable_api` 20 | -------------------------------------------------------------------------------- /book/stable_api.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Stable API 3 | 4 | L'API stable de Symfony2 5 | ======================== 6 | 7 | L'API stable de Symfony2 est un sous-ensemble de toutes les méthodes publiques 8 | de Symfony2 (composants et bundles "du coeur") qui partagent les propriétés suivantes: 9 | 10 | * le namespace et le nom de la classe ne changeront pas, 11 | * le nom de la méthode ne changera pas, 12 | * la signature de la méthode (arguments et valeur de retour) ne changera pas, 13 | * l'objectif de la méthode ne changera pas 14 | 15 | L'implémentation elle-même peut changer. La seule raison valable d'un changement 16 | de l'API stable de Symfony2 serait de corriger un problème de sécurité. 17 | 18 | L'API stable est basée sur un principe de liste blanche ("whitelist"), taggée 19 | par `@api`. En conséquence, tout ce qui n'est pas explicitement tagué ne fait pas 20 | partie de l'API stable. 21 | 22 | .. tip:: 23 | 24 | Chaque bundle tiers devrait aussi publier sa propre API stable. 25 | 26 | Tout comme Symfony 2.0, les composants suivants ont leur propre API publique : 27 | 28 | * BrowserKit 29 | * ClassLoader 30 | * Console 31 | * CssSelector 32 | * DependencyInjection 33 | * DomCrawler 34 | * EventDispatcher 35 | * Finder 36 | * HttpFoundation 37 | * HttpKernel 38 | * Locale 39 | * Process 40 | * Routing 41 | * Templating 42 | * Translation 43 | * Validator 44 | * Yaml 45 | -------------------------------------------------------------------------------- /bundles/SensioFrameworkExtraBundle/annotations/cache.rst: -------------------------------------------------------------------------------- 1 | @Cache 2 | ====== 3 | 4 | Utilisation 5 | ----------- 6 | 7 | L'annotation ``@Cache`` facilite la définition du cache HTTP:: 8 | 9 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache; 10 | 11 | /** 12 | * @Cache(expires="tomorrow") 13 | */ 14 | public function indexAction() 15 | { 16 | } 17 | 18 | Vous pouvez également définir l'annotation sur une classe pour définir le 19 | cache pour toutes ses méthodes:: 20 | 21 | /** 22 | * @Cache(expires="tomorrow") 23 | */ 24 | class BlogController extends Controller 25 | { 26 | } 27 | 28 | Lorsqu'il y a un conflit entre la configuration de la classe et la configuration d'une méthode, 29 | la dernière surcharge la première:: 30 | 31 | /** 32 | * @Cache(expires="tomorrow") 33 | */ 34 | class BlogController extends Controller 35 | { 36 | /** 37 | * @Cache(expires="+2 days") 38 | */ 39 | public function indexAction() 40 | { 41 | } 42 | } 43 | 44 | Attributs 45 | --------- 46 | 47 | Voici une liste des attributs valides, ainsi que les en-têtes 48 | HTTP correspondantes : 49 | 50 | ============================== ================ 51 | Annotation Méthode Response 52 | ============================== ================ 53 | ``@Cache(expires="tomorrow")`` ``$response->setExpires()`` 54 | ``@Cache(smaxage="15")`` ``$response->setSharedMaxAge()`` 55 | ``@Cache(maxage="15")`` ``$response->setMaxAge()`` 56 | ============================== ================ 57 | 58 | .. note:: 59 | 60 | L'attribut ``expires`` accepte toute date valide qui est comprise par 61 | la fonction PHP ``strtotime()``. 62 | 63 | -------------------------------------------------------------------------------- /bundles/SensioFrameworkExtraBundle/annotations/view.rst: -------------------------------------------------------------------------------- 1 | @Template 2 | ========= 3 | 4 | Utilisation 5 | ----------- 6 | 7 | L'annotation ``@Template`` associe un contrôleur à un nom de template:: 8 | 9 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 10 | 11 | /** 12 | * @Template("SensioBlogBundle:Post:show") 13 | */ 14 | public function showAction($id) 15 | { 16 | // récupère l'objet Post 17 | $post = ...; 18 | 19 | return array('post' => $post); 20 | } 21 | 22 | Lorsque vous utilisez l'annotation ``@Template``, le contrôleur devrait retourner 23 | un tableau de paramètres à passer à la vue plutôt que de retourner un objet ``Response``. 24 | 25 | .. tip:: 26 | 27 | Si l'action retourne un objet ``Response``, l'annotation ``@Template`` 28 | sera simplement ignorée. 29 | 30 | Si le template est nommé d'après les noms du contrôleur et de l'action, ce qui 31 | est le cas dans l'exemple ci-dessus, vous pouvez même éviter de spécifier la valeur 32 | de l'annotation:: 33 | 34 | /** 35 | * @Template 36 | */ 37 | public function showAction($id) 38 | { 39 | // récupère l'objet Post 40 | $post = ...; 41 | 42 | return array('post' => $post); 43 | } 44 | 45 | .. note:: 46 | 47 | Si vous utilisez PHP comme moteur de template, vous devrez le spécifier:: 48 | 49 | /** 50 | * @Template(engine="php") 51 | */ 52 | public function showAction($id) 53 | { 54 | // ... 55 | } 56 | 57 | Et si les seuls paramètres à passer au template sont les arguments de méthodes, 58 | vous pouvez utiliser l'attribut ``vars`` au lieu de retourner un tableau. C'est très 59 | utile en association avec l':doc:`annotation ` ``@ParamConverter``:: 60 | 61 | /** 62 | * @ParamConverter("post", class="SensioBlogBundle:Post") 63 | * @Template("SensioBlogBundle:Post:show", vars={"post"}) 64 | */ 65 | public function showAction(Post $post) 66 | { 67 | } 68 | 69 | Ce qui, grâce aux conventions, est équivalent à la configuration suivante:: 70 | 71 | /** 72 | * @Template(vars={"post"}) 73 | */ 74 | public function showAction(Post $post) 75 | { 76 | } 77 | 78 | Vous pouvez même la rendre encore plus concise car tout les arguments de méthodes 79 | sont automatiquement passés au template si la méthode retourne ``null`` et que l'attribut 80 | ``vars`` n'est pas défini:: 81 | 82 | /** 83 | * @Template 84 | */ 85 | public function showAction(Post $post) 86 | { 87 | } 88 | -------------------------------------------------------------------------------- /bundles/SensioGeneratorBundle/commands/generate_bundle.rst: -------------------------------------------------------------------------------- 1 | Générer un squelette pour un nouveau bundle 2 | =========================================== 3 | 4 | Utilisation 5 | ----------- 6 | 7 | La commande ``generate:bundle`` génère une nouvelle structure de bundle et l'active 8 | automatiquement dans votre application. 9 | 10 | Par défaut, la commande est exécutée en mode interactif et vous pose des questions 11 | pour définir le nom du bundle, son emplacement, son format de configuration et sa 12 | structure par défaut : 13 | 14 | .. code-block:: bash 15 | 16 | php app/console generate:bundle 17 | 18 | Pour désactiver le mode interactif, utilisez l'option `--no-interaction` mais il 19 | vous faudra alors penser à passer toutes les options obligatoires : 20 | 21 | .. code-block:: bash 22 | 23 | php app/console generate:bundle --namespace=Acme/Bundle/BlogBundle --no-interaction 24 | 25 | Options disponibles 26 | ------------------- 27 | 28 | * ``--namespace``: L'espace de nom du bundle à créer. L'espace de nom devrait commencer 29 | avec un nom « commercial » comme le nom de votre entreprise, le nom de votre projet 30 | ou le nom de votre client, suivi par un ou plusieurs sous-espace(s) de nom facultatifs, 31 | et devrait être terminé par le nom du bundle lui-même (qui doit avoir Bundle comme 32 | suffixe) : 33 | 34 | .. code-block:: bash 35 | 36 | php app/console generate:bundle --namespace=Acme/Bundle/BlogBundle 37 | 38 | * ``--bundle-name``: Le nom du bundle facultatif. Ce doit être une chaîne de 39 | caractères terminée par le suffixe ``Bundle`` : 40 | 41 | .. code-block:: bash 42 | 43 | php app/console generate:bundle --bundle-name=AcmeBlogBundle 44 | 45 | * ``--dir``: Le répertoire dans lequel stocker le bundle. Par convention, 46 | la commande détecte et utilise le répertoire ``src/`` de l'application : 47 | 48 | .. code-block:: bash 49 | 50 | php app/console generate:bundle --dir=/var/www/myproject/src 51 | 52 | * ``--format``: (**annotation**) [valeurs: yml, xml, php ou annotation] 53 | Détermine le format à utiliser pour les fichiers de configuration générés 54 | comme le routage. Par défaut, la commande utilise le format ``annotation``. 55 | Choisir le format ``annotation`` implique que le ``SensioFrameworkExtraBundle`` 56 | soit déjà installé : 57 | 58 | .. code-block:: bash 59 | 60 | php app/console generate:bundle --format=annotation 61 | 62 | * ``--structure``: Spécifie s'il faut génerer la structure de répertoire complète, incluant les répertoires publics 63 | pour la documentation et les ressources web ainsi que les dictionnaires de 64 | traductions : 65 | 66 | .. code-block:: bash 67 | 68 | php app/console generate:bundle --structure 69 | -------------------------------------------------------------------------------- /bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.rst: -------------------------------------------------------------------------------- 1 | Générer un contrôleur CRUD basé sur une entité Doctrine 2 | ======================================================= 3 | 4 | Utilisation 5 | ----------- 6 | 7 | La commande ``generate:doctrine:crud`` génère un contrôleur basique pour une 8 | entité donnée, localisé dans un bundle donné. Ce contrôleur vous permet 9 | d'effectuer les cinq opérations de base sur un modèle. 10 | 11 | * Afficher les enregistrements, 12 | * Afficher un seul enregistrement en se basant sur sa clé primaire, 13 | * Créer un nouvel enregistrement, 14 | * Modifier un enregistrement existant, 15 | * Supprimer un enregistrement existant. 16 | 17 | Par défaut, la commande est exécutée en mode interactif et vous pose des questions 18 | pour définir le nom de l'entité, le préfixe de la route et s'il faut ou non générer 19 | les actions : 20 | 21 | .. code-block:: bash 22 | 23 | php app/console generate:doctrine:crud 24 | 25 | Pour désactiver le mode interactif, utilisez l'option `--no-interaction` mais il 26 | vous faudra alors penser à passer toutes les options obligatoires : 27 | 28 | .. code-block:: bash 29 | 30 | php app/console generate:doctrine:crud --entity=AcmeBlogBundle:Post --format=annotation --with-write --no-interaction 31 | 32 | Options disponibles 33 | ------------------- 34 | 35 | * ``--entity``: Le nom de l'entité donné en notation raccourcie, contenant le nom 36 | du bundle dans lequel l'entité est localisée, ainsi que le nom de l'entité. 37 | Par exemple, ``AcmeBlogBundle:Post`` : 38 | 39 | .. code-block:: bash 40 | 41 | php app/console generate:doctrine:crud --entity=AcmeBlogBundle:Post 42 | 43 | * ``--route-prefix``: Le préfixe à utiliser pour chaque route associée à une 44 | action : 45 | 46 | .. code-block:: bash 47 | 48 | php app/console generate:doctrine:crud --route-prefix=acme_post 49 | 50 | * ``--with-write``: (**no**) [valeurs: yes|no] Spécifie s'il faut générer ou non 51 | les actions `new`, `create`, `edit`, `update` et `delete` : 52 | 53 | .. code-block:: bash 54 | 55 | php app/console generate:doctrine:crud --with-write 56 | 57 | * ``--format``: (**annotation**) [valeurs: yml, xml, php ou annotation] 58 | Détermine le format à utiliser pour les fichiers de configuration générés 59 | comme le routage. Par défaut, la commande utilise le format ``annotation``. 60 | Choisir le format ``annotation`` implique que le ``SensioFrameworkExtraBundle`` 61 | soit déjà installé : 62 | 63 | .. code-block:: bash 64 | 65 | php app/console generate:doctrine:crud --format=annotation 66 | -------------------------------------------------------------------------------- /bundles/SensioGeneratorBundle/commands/generate_doctrine_entity.rst: -------------------------------------------------------------------------------- 1 | Générer une nouvelle entité Doctrine 2 | ==================================== 3 | 4 | Utilisation 5 | ----------- 6 | 7 | La commande ``generate:doctrine:entity`` génère une nouvelle entité Doctrine 8 | incluant la définition du « mapping » ainsi que des propriétés, accesseurs et 9 | mutateurs de la classe. 10 | 11 | Par défaut, la commande est exécutée en mode interactif et vous pose des questions 12 | pour définir le nom de l'entité, son emplacement, son format de configuration et sa 13 | structure par défaut : 14 | 15 | .. code-block:: bash 16 | 17 | php app/console generate:doctrine:entity 18 | 19 | Pour désactiver le mode interactif, utilisez l'option `--no-interaction` mais il 20 | vous faudra alors penser à passer toutes les options obligatoires : 21 | 22 | .. code-block:: bash 23 | 24 | php app/console generate:doctrine:entity --no-interaction --entity=AcmeBlogBundle:Post --fields="title:string(100) body:text" --format=xml 25 | 26 | Options disponibles 27 | ------------------- 28 | 29 | * ``--entity``: Le nom de l'entité donné en notation raccourcie, contenant le nom 30 | du bundle dans lequel l'entité est localisée, ainsi que le nom de l'entité. 31 | Par exemple, ``AcmeBlogBundle:Post`` : 32 | 33 | .. code-block:: bash 34 | 35 | php app/console generate:doctrine:entity --entity=AcmeBlogBundle:Post 36 | 37 | * ``--fields``: La liste des champs à générer dans la classe entité : 38 | 39 | .. code-block:: bash 40 | 41 | php app/console generate:doctrine:entity --fields="title:string(100) body:text" 42 | 43 | * ``--format``: (**annotation**) [valeurs: yml, xml, php ou annotation] 44 | Détermine le format à utiliser pour les fichiers de configuration générés 45 | comme le routage. Par défaut, la commande utilise le format ``annotation``. 46 | Choisir le format ``annotation`` implique que le ``SensioFrameworkExtraBundle`` 47 | soit déjà installé : 48 | 49 | .. code-block:: bash 50 | 51 | php app/console generate:doctrine:entity --format=annotation 52 | 53 | * ``--with-repository``: Cette option indique de créer ou non la classe 54 | Doctrine `EntityRepository` associée : 55 | 56 | .. code-block:: bash 57 | 58 | php app/console generate:doctrine:entity --with-repository 59 | -------------------------------------------------------------------------------- /bundles/SensioGeneratorBundle/commands/generate_doctrine_form.rst: -------------------------------------------------------------------------------- 1 | Générer une nouvelle classe de type de formulaire basée sur une entité Doctrine 2 | =============================================================================== 3 | 4 | Utilisation 5 | ----------- 6 | 7 | La commande ``generate:doctrine:form`` génère une classe de type de formulaire 8 | basique en utilisant les métadonnées de « mapping » d'une classe entité donnée : 9 | 10 | .. code-block:: bash 11 | 12 | php app/console generate:doctrine:form AcmeBlogBundle:Post 13 | 14 | Arguments obligatoires 15 | ---------------------- 16 | 17 | * ``entity``: Le nom de l'entité donné en notation raccourcie, contenant le nom 18 | du bundle dans lequel l'entité est localisée, ainsi que le nom de l'entité. 19 | Par exemple, ``AcmeBlogBundle:Post`` : 20 | 21 | .. code-block:: bash 22 | 23 | php app/console generate:doctrine:form AcmeBlogBundle:Post 24 | -------------------------------------------------------------------------------- /bundles/SensioGeneratorBundle/index.rst: -------------------------------------------------------------------------------- 1 | SensioGeneratorBundle 2 | ===================== 3 | 4 | Le ``SensioGeneratorBundle`` étend l'interface de ligne de commande par défaut 5 | de Symfony2 en proposant de nouvelles commandes interactives et intuitives pour 6 | générer des squelettes de code pour des bundles, des classes de formulaire, ou des 7 | contrôleurs CRUD basés sur un schéma Doctrine 2. 8 | 9 | Installation 10 | ------------ 11 | 12 | `Téléchargez`_ le bundle et placez le sous l'espace de nom ``Sensio\\Bundle\\``. 13 | Ensuite, comme pour tout autre bundle, incluez dans votre classe Kernel:: 14 | 15 | public function registerBundles() 16 | { 17 | $bundles = array( 18 | ... 19 | 20 | new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(), 21 | ); 22 | 23 | ... 24 | } 25 | 26 | Liste des commandes disponibles 27 | ------------------------------- 28 | 29 | Le ``SensioGeneratorBundle`` est fourni avec quatre nouvelles commandes qui 30 | peuvent être exécutées en mode interactif ou non. Le mode interactif vous pose 31 | quelques questions pour configurer les paramètres servant à générer le code définitif. 32 | La liste des commandes est listée ci-dessous : 33 | 34 | .. toctree:: 35 | :maxdepth: 1 36 | 37 | commands/generate_bundle 38 | commands/generate_doctrine_crud 39 | commands/generate_doctrine_entity 40 | commands/generate_doctrine_form 41 | 42 | .. _Téléchargez: http://github.com/sensio/SensioGeneratorBundle -------------------------------------------------------------------------------- /bundles/index.rst: -------------------------------------------------------------------------------- 1 | Les Bundles de l'Edition Standard de Symfony 2 | ============================================ 3 | 4 | .. toctree:: 5 | :hidden: 6 | 7 | SensioFrameworkExtraBundle/index 8 | SensioGeneratorBundle/index 9 | DoctrineFixturesBundle/index 10 | DoctrineMigrationsBundle/index 11 | DoctrineMongoDBBundle/index 12 | 13 | .. include:: /bundles/map.rst.inc 14 | -------------------------------------------------------------------------------- /bundles/map.rst.inc: -------------------------------------------------------------------------------- 1 | * :doc:`SensioFrameworkExtraBundle ` 2 | * :doc:`SensioGeneratorBundle ` 3 | * `JMSSecurityExtraBundle`_ 4 | * `JMSDiExtraBundle`_ 5 | * :doc:`DoctrineFixturesBundle ` 6 | * :doc:`DoctrineMigrationsBundle ` 7 | * :doc:`DoctrineMongoDBBundle ` 8 | 9 | .. _`JMSSecurityExtraBundle`: http://jmsyst.com/bundles/JMSSecurityExtraBundle/1.2 10 | .. _`JMSDiExtraBundle`: http://jmsyst.com/bundles/JMSDiExtraBundle/1.1 -------------------------------------------------------------------------------- /cmf/index.rst: -------------------------------------------------------------------------------- 1 | Symfony CMF 2 | =========== 3 | 4 | Voir http://symfony.com/doc/master/cmf/index.html 5 | -------------------------------------------------------------------------------- /components/config/index.rst: -------------------------------------------------------------------------------- 1 | Config 2 | ====== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | resources 9 | caching 10 | definition 11 | -------------------------------------------------------------------------------- /components/config/introduction.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Config 3 | single: Components; Config 4 | 5 | Le Composant Config 6 | =================== 7 | 8 | Introduction 9 | ------------ 10 | 11 | Le Composant Config fournit plusieurs classes pour vous aider à trouver, 12 | charger, combiner, préremplir et valider des valeurs de configuration de 13 | n'importe quel type, quelle que soit leur source (Yaml, XML, fichiers INI, 14 | ou par exemple une base de données). 15 | 16 | Installation 17 | ------------ 18 | 19 | Vous pouvez installer le composant de deux manières différentes : 20 | 21 | * Utilisez le dépôt Git officiel (https://github.com/symfony/Config) ; 22 | * :doc:`Installez le via Composer ` (``symfony/config`` à `Packagist`_). 23 | 24 | Sections 25 | -------- 26 | 27 | * :doc:`/components/config/resources` 28 | * :doc:`/components/config/caching` 29 | * :doc:`/components/config/definition` 30 | 31 | .. _Packagist: https://packagist.org/packages/symfony/config -------------------------------------------------------------------------------- /components/console/changing_default_command.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console; Changing the Default Command 3 | 4 | Modifier la commande par défault 5 | ================================ 6 | 7 | .. versionadded:: 2.5 8 | La méthode :method:`Symfony\\Component\\Console\\Application::setDefaultCommand` 9 | a été ajouté dans le version 2.5. 10 | 11 | ``app/console`` lancera toujours ``ListCommand`` lorsqu'aucune commande n'est passée. 12 | Pour changer la commande par défaut vous n'avez simplement qu'à passer le nom de la 13 | commande que vous souhaitez lancer par défaut dans la méthode ``setDefaultCommand`` :: 14 | 15 | namespace Acme\Console\Command; 16 | 17 | use Symfony\Component\Console\Command\Command; 18 | use Symfony\Component\Console\Input\InputInterface; 19 | use Symfony\Component\Console\Output\OutputInterface; 20 | 21 | class HelloWorldCommand extends Command 22 | { 23 | protected function configure() 24 | { 25 | $this->setName('hello:world') 26 | ->setDescription('Outputs \'Hello World\''); 27 | } 28 | 29 | protected function execute(InputInterface $input, OutputInterface $output) 30 | { 31 | $output->writeln('Hello World'); 32 | } 33 | } 34 | 35 | Exécuter l'application et changer la commande par défaut :: 36 | 37 | // application.php 38 | 39 | use Acme\Console\Command\HelloWorldCommand; 40 | use Symfony\Component\Console\Application; 41 | 42 | $command = new HelloWorldCommand(); 43 | $application = new Application(); 44 | $application->add($command); 45 | $application->setDefaultCommand($command->getName()); 46 | $application->run(); 47 | 48 | Testez la nouvelle commande console par défaut en lançant la 49 | commande suivante : 50 | 51 | .. code-block:: bash 52 | 53 | $ php application.php 54 | 55 | Cela affichera ce qui suit dans votre ligne de commande : 56 | 57 | .. code-block:: text 58 | 59 | Hello World 60 | 61 | .. tip:: 62 | 63 | Cette fonctionnalité a une limitation : il est impossible de l'utiliser 64 | avec des arguments. 65 | 66 | Apprenez-en plus ! 67 | ------------------ 68 | 69 | * :doc:`/components/console/single_command_tool` 70 | -------------------------------------------------------------------------------- /components/console/helpers/formatterhelper.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console Helpers; Formatter Helper 3 | 4 | Formatter Helper 5 | ================ 6 | 7 | Le Formatter Helper fournit des fonctions pour formater la sortie avec les couleurs. 8 | Vous pouvez faire des choses plus avancées avec cette aide 9 | :ref:`components-console-coloring`. 10 | 11 | La méthode :class:`Symfony\\Component\\Console\\Helper\\FormatterHelper`fait partie 12 | des helpers par défaut, que vous pouvez obtenir en appelant la méthode 13 | :method:`Symfony\\Component\\Console\\Command\\Command::getHelperSet`:: 14 | 15 | $formatter = $this->getHelperSet()->get('formatter'); 16 | 17 | Les méthodes retournent une chaîne, ce que vous pouvez rendre directement avec 18 | :method:`OutputInterface::writeln`. 19 | 20 | Ecrire un message avec une section 21 | ---------------------------------- 22 | 23 | Symfony propose un style défini lors de l'affichage d'un message qui appartient à une certaine 24 | «section». Elle affiche la section en couleur et avec des crochets autour d'elle et le 25 | message réelle à sa droite. La couleur en moins, cela pourrait ressembler à ça: 26 | 27 | .. code-block:: text 28 | 29 | [UneSection] Un message en rapport avec cette section 30 | 31 | Pour reproduire ce style, vous pouvez utilisez la méthode 32 | :method:`Symfony\\Component\\Console\\Helper\\FormatterHelper::formatSection`:: 33 | 34 | $formattedLine = $formatter->formatSection( 35 | 'Unesection', 36 | 'Un message en rapport avec cette section' 37 | ); 38 | $output->writeln($formattedLine); 39 | 40 | Ecrire un message dans un bloc 41 | ------------------------------ 42 | 43 | Certaines fois, vous souhaiteriez afficher un bloc de texte avec une couleur de fond. 44 | Symfony l'utilise pour afficher des messages d'erreur. 45 | 46 | Si vous écrivez vos messages d'erreur sur plus d'une ligne, vous pouvez 47 | remarquerez que le fond est aussi long que chaque ligne. Pour générer un bloc 48 | utilisez la méthode :method:`Symfony\\Component\\Console\\Helper\\FormatterHelper::formatBlock`:: 49 | 50 | $errorMessages = array('Erreur!', 'Quelque chose ne vas pas'); 51 | $formattedBlock = $formatter->formatBlock($errorMessages, 'error'); 52 | $output->writeln($formattedBlock); 53 | 54 | Comme vous pouvez le voir, on peux passer un tableau de messages à la méthode 55 | :method:`Symfony\\Component\\Console\\Helper\\FormatterHelper::formatBlock` 56 | pour créer la sortie désirée. Si vous passez ``true`` en 3eme paramètre, 57 | le bloc est formaté avec plus de style (une ligne vide au dessus et en dessous des messages, 58 | ainsi que deux espaces à gauche et à droite). 59 | 60 | Dans le cas précédent, vous utilisiez le style prédéfini ``error``, 61 | mais vous pouvez créer votre propre style, regardez :ref:`components-console-coloring`. 62 | -------------------------------------------------------------------------------- /components/console/helpers/index.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console; Console Helpers 3 | 4 | Les Helpers de Console 5 | ====================== 6 | 7 | .. toctree:: 8 | :hidden: 9 | 10 | dialoghelper 11 | formatterhelper 12 | progresshelper 13 | tablehelper 14 | 15 | Le Composant Console est fournit avec des helpers très utiles. Ces helpers contiennent 16 | des fonctions qui facilitent certaines tâches communes 17 | 18 | .. include:: map.rst.inc -------------------------------------------------------------------------------- /components/console/helpers/map.rst.inc: -------------------------------------------------------------------------------- 1 | * :doc:`/components/console/helpers/dialoghelper` 2 | * :doc:`/components/console/helpers/formatterhelper` 3 | * :doc:`/components/console/helpers/progresshelper` 4 | * :doc:`/components/console/helpers/tablehelper` 5 | -------------------------------------------------------------------------------- /components/console/helpers/tablehelper.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console Helpers; Table Helper 3 | 4 | Table Helper 5 | ============ 6 | 7 | .. versionadded:: 2.3 8 | Le Helper ``table`` a été ajouté à Symfony 2.3. 9 | 10 | Quand vous développez une application console, il peut être utile d'afficher 11 | des tableaux de données: 12 | 13 | .. image:: /images/components/console/table.png 14 | 15 | Pour afficher un tableau, utilisez la classe :class:`Symfony\\Component\\Console\\Helper\\TableHelper`, 16 | définissez les entêtes, les lignes et affichez:: 17 | 18 | $table = $app->getHelperSet()->get('table'); 19 | $table 20 | ->setHeaders(array('ISBN-13', 'TITRE', 'AUTEUR')) 21 | ->setRows(array( 22 | array('978-2080712196', 'La divine comédie', 'Dante Alighieri'), 23 | array('978-2070381951', 'Le conte de deux cités', 'Charles Dickens'), 24 | array('978-2266232999', 'Le seigneur des anneaux', 'J. R. R. Tolkien'), 25 | array('978-2013224024', 'Les dix petits nègres', 'Agatha Christie'), 26 | )) 27 | ; 28 | $table->render($output); 29 | 30 | L'aspect du tableau peut aussi être modifié. Il y a deux façons de personnaliser 31 | le rendu du tableau: utilisé des layouts nommés ou en personnalisant les options 32 | de rendu. 33 | 34 | Personnaliser l'aspect d'un tableau en utilisant des layouts nommés 35 | ------------------------------------------------------------------- 36 | 37 | Le Helper Table embarque deux layouts déjà configurés: 38 | 39 | * ``TableHelper::LAYOUT_DEFAULT`` 40 | 41 | * ``TableHelper::LAYOUT_BORDERLESS`` 42 | 43 | Le Layout peut être défini avec la méthode :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setLayout`. 44 | 45 | Personnaliser l'aspect d'un tableau en utilisant les options de rendu 46 | --------------------------------------------------------------------- 47 | 48 | Vous pouvez contrôler le rendu du tableau en définissant avec des valeurs 49 | personnalisées les options de rendu: 50 | 51 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setPaddingChar` 52 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setHorizontalBorderChar` 53 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setVerticalBorderChar` 54 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setVrossingChar` 55 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setVellHeaderFormat` 56 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setVellRowFormat` 57 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setBorderFormat` 58 | * :method:`Symfony\\Component\\Console\\Helper\\TableHelper::setPadType` 59 | -------------------------------------------------------------------------------- /components/console/index.rst: -------------------------------------------------------------------------------- 1 | Console 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | usage 9 | changing_default_command 10 | single_command_tool 11 | events 12 | helpers/index -------------------------------------------------------------------------------- /components/console/single_command_tool.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console; Single command application 3 | 4 | Comment construire une application qui est une commande unique 5 | ============================================================== 6 | 7 | Lorsque vous construisez un outil de ligne de commande, vous n'avez peut 8 | être pas besoin de fournir plusieurs commandes. Dans ce cas, devoir passer 9 | plusieurs noms de commande à chaque fois peut être fastidieux. Heureusement, 10 | il est possible de supprimer cette nécessité en étendant l'application:: 11 | 12 | namespace Acme\Tool; 13 | 14 | use Symfony\Component\Console\Application; 15 | use Symfony\Component\Console\Input\InputInterface; 16 | 17 | class MyApplication extends Application 18 | { 19 | /** 20 | * Récupère le nom de la commande saisie. 21 | * 22 | * @param InputInterface $input L'interface de saisie 23 | * 24 | * @return string Le nom de la commande 25 | */ 26 | protected function getCommandName(InputInterface $input) 27 | { 28 | // Retourne le nom de votre commande. 29 | return 'my_command'; 30 | } 31 | 32 | /** 33 | * Récupère les commandes par défaut qui sont toujours disponibles. 34 | * 35 | * @return array Un tableau d'instances de commandes par défaut 36 | */ 37 | protected function getDefaultCommands() 38 | { 39 | // Conserve les commandes par défaut du noyau pour avoir la 40 | // commande HelpCommand en utilisant l'option --help 41 | $defaultCommands = parent::getDefaultCommands(); 42 | 43 | $defaultCommands[] = new MyCommand(); 44 | 45 | return $defaultCommands; 46 | } 47 | 48 | /** 49 | * Surchargé afin que l'application accepte que le premier argument ne 50 | * soit pas le nom. 51 | */ 52 | public function getDefinition() 53 | { 54 | $inputDefinition = parent::getDefinition(); 55 | // efface le premier argument, qui est le nom de la commande 56 | $inputDefinition->setArguments(); 57 | 58 | return $inputDefinition; 59 | } 60 | } 61 | 62 | 63 | Lorsque vous appelez votre script de console, la commande `MyCommand` 64 | sera maintenant toujours utilisée, sans avoir à saisir son nom. 65 | 66 | Vous pouvez aussi simplifier l'éxécution de l'application:: 67 | 68 | #!/usr/bin/env php 69 | run(); 75 | 76 | -------------------------------------------------------------------------------- /components/debug/class_loader.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Class Loader; DebugClassLoader 3 | single: Debug; DebugClassLoader 4 | 5 | Débugger un Class Loader 6 | ======================== 7 | 8 | .. versionadded:: 2.4 9 | Le ``DebugClassLoader`` du composant Debug est nouveau dans Symfony 2.4. 10 | Précédemment, cette classe était située dans le composant Class Loader. 11 | 12 | La classe :class:`Symfony\\Component\\Debug\\DebugClassLoader` tente de 13 | jeter des exceptions plus explicites lorsqu'une classe n'est pas retrouvée 14 | par les autoladers enregistrés. Tous les autoloaders qui implémentent la 15 | méthode ``findFile()`` sont remplacés avec un wrapper ``DebugClassLoader``. 16 | 17 | L'utilisation de ``DebugClassLoader`` est aussi facile que d'appeler 18 | la méthode statique :method:`Symfony\\Component\\Debug\\DebugClassLoader::enable` :: 19 | 20 | use Symfony\Component\ClassLoader\DebugClassLoader; 21 | 22 | DebugClassLoader::enable(); 23 | -------------------------------------------------------------------------------- /components/debug/index.rst: -------------------------------------------------------------------------------- 1 | Debug 2 | ===== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | class_loader -------------------------------------------------------------------------------- /components/debug/introduction.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Debug 3 | single: Components; Debug 4 | 5 | Le Composant Debug 6 | ================== 7 | 8 | Le composant Debug founit des outils pour faciliter le debugging 9 | du code PHP. 10 | 11 | .. versionadded:: 2.3 12 | Le Composant Debug est nouveau en Symfony 2.3. Précédemment, les classes 13 | étaient situées dans le composant HttpKernel. 14 | 15 | Installation 16 | ------------ 17 | 18 | Vous pouvez installer le composant de deux manières différentes : 19 | 20 | * Utilisez le dépôt Git officiel (https://github.com/symfony/Debug); 21 | * :doc:`Installez le via Composer ` (``symfony/debug`` sur `Packagist`_). 22 | 23 | Utilisation 24 | ----------- 25 | 26 | Le composant Debug fournit quelques outils pour vous aider à débugger 27 | du code PHP. Activer ces outils est aussi simple que de faire :: 28 | 29 | use Symfony\Component\Debug\Debug; 30 | 31 | Debug::enable(); 32 | 33 | La méthode :method:`Symfony\\Component\\Debug\\Debug::enable` enregistre 34 | un error handler (gestionnaire d'erreur), un exception handler (gestionnaire 35 | d'exception) et une :doc:`classe loader spéciale `. 36 | 37 | Lisez les sections suivantes pour plus d'informations sur les différents 38 | outils disponibles. 39 | 40 | .. caution:: 41 | 42 | Vous ne devriez jamais activer les outils de debug en environnement de 43 | production car ils divulgueraient des informations sensibles à l'utilisateur. 44 | 45 | Activer l'Error Handler 46 | ----------------------- 47 | 48 | La classe :class:`Symfony\\Component\\Debug\\ErrorHandler` attrape les erreurs 49 | PHP et les convertit en exceptions (de la classe :phpclass:`ErrorException` 50 | ou :class:`Symfony\\Component\\Debug\\Exception\\FatalErrorException` pour les 51 | fatal erreurs PHP) :: 52 | 53 | use Symfony\Component\Debug\ErrorHandler; 54 | 55 | ErrorHandler::register(); 56 | 57 | Activer l'Exception Handler 58 | --------------------------- 59 | 60 | La classe :class:`Symfony\\Component\\Debug\\ExceptionHandler` attrape les 61 | exceptions PHP non rattrapées et les convertit en jolie réponses PHP. C'est 62 | utile en mode debug pour remplacer la sortie PHP/XDebug par défaut, par 63 | quelque chose de plus joli et plus utile :: 64 | 65 | use Symfony\Component\Debug\ExceptionHandler; 66 | 67 | ExceptionHandler::register(); 68 | 69 | .. note:: 70 | 71 | Si le :doc:`composant HttpFoundation ` est 72 | disponible, le handler (gestionnaire) utilise un objet Response de Symfony; le cas 73 | échéant, il retourne une réponse PHP standard. 74 | 75 | .. _Packagist: https://packagist.org/packages/symfony/debug 76 | -------------------------------------------------------------------------------- /components/dependency_injection/index.rst: -------------------------------------------------------------------------------- 1 | Injection de Dépendance 2 | ======================= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | types 9 | parameters 10 | definitions 11 | compilation 12 | tags 13 | factories 14 | configurators 15 | parentservices 16 | advanced 17 | lazy_services 18 | workflow 19 | 20 | -------------------------------------------------------------------------------- /components/event_dispatcher/index.rst: -------------------------------------------------------------------------------- 1 | Répartiteur d'Évènement 2 | ======================= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | generic_event 9 | container_aware_dispatcher 10 | -------------------------------------------------------------------------------- /components/expression_language/index.rst: -------------------------------------------------------------------------------- 1 | Expression Language 2 | =================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | syntax 9 | extending 10 | caching -------------------------------------------------------------------------------- /components/form/index.rst: -------------------------------------------------------------------------------- 1 | Form 2 | ==== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | type_guesser 9 | -------------------------------------------------------------------------------- /components/http_foundation/index.rst: -------------------------------------------------------------------------------- 1 | HttpFoundation 2 | ============== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | sessions 9 | session_configuration 10 | session_testing 11 | session_php_bridge 12 | trusting_proxies -------------------------------------------------------------------------------- /components/http_foundation/session_php_bridge.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: HTTP 3 | single: HttpFoundation, Sessions 4 | 5 | Intégration avec les session "Legacy" 6 | ===================================== 7 | 8 | Parfois, il peut être nécessaire d'intégrer Symfony dans une vieille application 9 | ("legacy") où vous n'avez pas le niveau de contrôle dont vous avez besoin. 10 | 11 | Comme spécifié ailleurs, les sessions Symfony sont conçues pour remplacer 12 | l'usage des fonctions natives PHP ``session_*()`` et l'utilisation de la 13 | variable superglobale ``$_SESSION``. De plus, Symfony doit obligatoirement 14 | démarrer la session. 15 | 16 | Cependant, quand vous n'avez vraiment pas le choix, vous pouvez utiliser 17 | une passerelle spéciale :class:`Symfony\\Component\\HttpFoundation\\Session\\Storage\\PhpBridgeSessionStorage` 18 | qui est conçue pour permettre à Symfony de travailler avec une session qui a 19 | été démarrée en dehors du framework Symfony. A moins d'être très prudent, vous 20 | devez savoir que la session peut être interrompue par quelque chose, par exemple, 21 | si l'application legacy efface la variable ``$_SESSION``. 22 | 23 | Un usage typique ressemblerait à ceci:: 24 | 25 | use Symfony\Component\HttpFoundation\Session\Session; 26 | use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage; 27 | 28 | // l'application legacy configurer la session 29 | ini_set('session.save_handler', 'files'); 30 | ini_set('session.save_path', '/tmp'); 31 | session_start(); 32 | 33 | // interfaçage avec cette session grâce à Symfony 34 | $session = new Session(new PhpBridgeSessionStorage()); 35 | 36 | // Symfony travaille maintenant avec la session 37 | $session->start(); 38 | 39 | 40 | Cela vous permet de commencer à utiliser l'API de session Symfony et de permettre 41 | la migration de votre application vers les sessions Symfony. 42 | 43 | .. note:: 44 | 45 | Les sessions Symfony stockent des données comme des attributs dans des "Bags" 46 | (sacs) spéciaux qui utilisent des clés dans la variable superglobale ``$_SESSION``. 47 | Cela signifie qu'un session Symfony ne peut pas accéder aux clés de ``$_SESSION`` 48 | qui ont été définies par l'application legacy bien que le contenu de ``$_SESSION`` 49 | ait été enregistré lors de l'enregistrement de la session. 50 | -------------------------------------------------------------------------------- /components/http_foundation/session_testing.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: HTTP 3 | single: HttpFoundation, Sessions 4 | 5 | Tester avec les sessions 6 | ======================== 7 | 8 | Symfony2 est conçu depuis ses propres fondations avec l'objectif 9 | principal que le code soit testable. Afin de rendre votre code utilisant les 10 | sessions facilement testable, nous fournissons deux mécanismes de simulation 11 | de stockage pour les tests unitaires et fonctionnels. 12 | 13 | Tester du code en utilisant des sessions réelles est délicat car le flux 14 | des états dans PHP est global et il n'est pas possible d'avoir plusieurs 15 | sessions concurrentes dans le même processus PHP. 16 | 17 | Les moteurs de simulation de stockage simulent le flux d'une session PHP 18 | sans en démarrer une en fait ; ce qui vous permet de tester votre code sans 19 | avoir de complications. Vous pourriez aussi exécuter plusieurs instances 20 | dans le même processus PHP. 21 | 22 | Les « drivers » de simulation de stockage ne lisent ni écrivent les variables 23 | globales du système `session_id()` ou `session_name()`. Des méthodes sont 24 | fournies pour simuler cela si nécessaire : 25 | 26 | * :method:`Symfony\\Component\\HttpFoundation\\Session\\SessionStorageInterface::getId`: 27 | Récupère l'ID de la session. 28 | 29 | * :method:`Symfony\\Component\\HttpFoundation\\Session\\SessionStorageInterface::setId`: 30 | Définit l'ID de la session. 31 | 32 | * :method:`Symfony\\Component\\HttpFoundation\\Session\\SessionStorageInterface::getName`: 33 | Récupère le nom de la session. 34 | 35 | * :method:`Symfony\\Component\\HttpFoundation\\Session\\SessionStorageInterface::setName`: 36 | Définit le nom de la session. 37 | 38 | Tester de manière unitaire 39 | -------------------------- 40 | 41 | Pour tester unitairement où il n'est pas nécessaire de persister la session, 42 | vous devriez simplement permuter le moteur de stockage par défaut avec 43 | :class:`Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockArraySessionStorage`:: 44 | 45 | use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; 46 | use Symfony\Component\HttpFoundation\Session\Session; 47 | 48 | $session = new Session(new MockArraySessionStorage()); 49 | 50 | Tester de manière fonctionnelle 51 | ------------------------------- 52 | 53 | Pour tester de manière fonctionnelle où vous pourriez avoir besoin de persister 54 | les données de session à travers des processus PHP séparés, changer simplement 55 | le moteur de stockage pour qu'il soit 56 | :class:`Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockFileSessionStorage`:: 57 | 58 | use Symfony\Component\HttpFoundation\Session\Session; 59 | use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage; 60 | 61 | $session = new Session(new MockFileSessionStorage()); 62 | -------------------------------------------------------------------------------- /components/http_kernel/index.rst: -------------------------------------------------------------------------------- 1 | HttpKernel 2 | ========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | -------------------------------------------------------------------------------- /components/index.rst: -------------------------------------------------------------------------------- 1 | Les Composants 2 | ============== 3 | 4 | .. toctree:: 5 | :hidden: 6 | 7 | using_components 8 | class_loader 9 | config/index 10 | console/index 11 | css_selector 12 | debug/index 13 | dependency_injection/index 14 | dom_crawler 15 | event_dispatcher/index 16 | expression_language/index 17 | filesystem 18 | finder 19 | form/index 20 | http_foundation/index 21 | http_kernel/index 22 | locale 23 | process 24 | property_access/index 25 | routing/index 26 | security/index 27 | serializer 28 | templating 29 | yaml/index 30 | 31 | .. include:: /components/map.rst.inc 32 | -------------------------------------------------------------------------------- /components/locale.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Locale 3 | single: Components; Locale 4 | 5 | Le Composant Locale 6 | =================== 7 | 8 | Le composant « Locale » fournit une solution de secours pour gérer les cas où l'extension ``intl`` est 9 | manquante. De plus, il étend l'implémentation de la classe native :phpclass:`Locale` avec plusieurs 10 | méthodes pratiques. 11 | 12 | Des solutions de substitution pour les fonctions et classes suivantes sont fournies : 13 | 14 | * :phpfunction:`intl_is_failure` 15 | * :phpfunction:`intl_get_error_code` 16 | * :phpfunction:`intl_get_error_message` 17 | * :phpclass:`Collator` 18 | * :phpclass:`IntlDateFormatter` 19 | * :phpclass:`Locale` 20 | * :phpclass:`NumberFormatter` 21 | 22 | .. note:: 23 | 24 | L'implémentation de Stub supporte uniquement la locale ``en``. 25 | 26 | Installation 27 | ------------ 28 | 29 | Vous pouvez installer le composant de différentes manières : 30 | 31 | * Utilisez le dépôt Git officiel (https://github.com/symfony/Locale) ; 32 | * Installez le via Composer (``symfony/locale`` sur `Packagist`_). 33 | 34 | Utilisation 35 | ----------- 36 | 37 | Tirer parti de ce « code de secours » inclut le fait de requérir les bouts de fonctions et d'ajouter les 38 | morceaux de classes à l'« autoloader ». 39 | 40 | Lorsque vous utilisez le composant « ClassLoader », le code suivant est suffisant pour pallier l'extension 41 | ``intl`` manquante : 42 | 43 | .. code-block:: php 44 | 45 | if (!function_exists('intl_get_error_code')) { 46 | require __DIR__.'/path/to/src/Symfony/Component/Locale/Resources/stubs/functions.php'; 47 | 48 | $loader->registerPrefixFallbacks(array(__DIR__.'/path/to/src/Symfony/Component/Locale/Resources/stubs')); 49 | } 50 | 51 | La classe :class:`Symfony\\Component\\Locale\\Locale` enrichit la classe native :phpclass:`Locale` avec des 52 | fonctionnalités supplémentaires : 53 | 54 | .. code-block:: php 55 | 56 | use Symfony\Component\Locale\Locale; 57 | 58 | // récupère les noms de pays pour une locale ou récupère tous les codes de pays 59 | $countries = Locale::getDisplayCountries('pl'); 60 | $countryCodes = Locale::getCountries(); 61 | 62 | // récupère les noms de langue pour une locale ou récupère tous les codes de langue 63 | $languages = Locale::getDisplayLanguages('fr'); 64 | $languageCodes = Locale::getLanguages(); 65 | 66 | // récupère les noms de locale pour un code donné ou récupère tous les codes de locale 67 | $locales = Locale::getDisplayLocales('en'); 68 | $localeCodes = Locale::getLocales(); 69 | 70 | // récupère les versions ICU 71 | $icuVersion = Locale::getIcuVersion(); 72 | $icuDataVersion = Locale::getIcuDataVersion(); 73 | 74 | .. _Packagist: https://packagist.org/packages/symfony/locale -------------------------------------------------------------------------------- /components/process.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Process 3 | single: Components; Process 4 | 5 | Le Composant « Process » 6 | ======================== 7 | 8 | Le Composant « Process » exécute des commandes dans des sous-processus. 9 | 10 | Installation 11 | ------------ 12 | 13 | Vous pouvez installer le composant de différentes manières : 14 | 15 | * Utilisez le dépôt Git officiel (https://github.com/symfony/Process) ; 16 | * Installez le via Composer (``symfony/process`` sur `Packagist`_). 17 | 18 | Utilisation 19 | ----------- 20 | 21 | La classe :class:`Symfony\\Component\\Process\\Process` vous permet d'exécuter 22 | une commande dans un sous-processus:: 23 | 24 | use Symfony\Component\Process\Process; 25 | 26 | $process = new Process('ls -lsa'); 27 | $process->setTimeout(3600); 28 | $process->run(); 29 | if (!$process->isSuccessful()) { 30 | throw new \RuntimeException($process->getErrorOutput()); 31 | } 32 | 33 | print $process->getOutput(); 34 | 35 | La méthode :method:`Symfony\\Component\\Process\\Process::run` se charge 36 | des différences subtiles entre les différentes plateformes lors de 37 | l'exécution d'une commande. 38 | 39 | .. versionadded:: 2.2 40 | Les méthodes ``getIncrementalOutput()`` et ``getIncrementalErrorOutput()`` 41 | ont été ajoutées dans Symfony 2.2. 42 | 43 | La méthode ``getOutput()`` retourne toujours l'ensemble du contenu de la 44 | sortie standard de la console et la méthode ``getErrorOutput()`` le contenu 45 | de l'erreur. Alternativement, les méthodes ``getIncrementalOutput()`` et 46 | ``getIncrementalErrorOutput()`` retournent les nouvelles sorties depuis le 47 | dernier appel. 48 | 49 | Lorsque vous exécutez une commande durant un certain temps (comme effectuer un 50 | rsync de fichiers vers un serveur distant), vous pouvez donner un retour 51 | à l'utilisateur final en temps réel en passant une fonction anonyme à la 52 | méthode :method:`Symfony\\Component\\Process\\Process::run`:: 53 | 54 | use Symfony\Component\Process\Process; 55 | 56 | $process = new Process('ls -lsa'); 57 | $process->run(function ($type, $buffer) { 58 | if ('err' === $type) { 59 | echo 'ERR > '.$buffer; 60 | } else { 61 | echo 'OUT > '.$buffer; 62 | } 63 | }); 64 | 65 | Si vous voulez exécuter du code PHP de manière isolée, utilisez plutôt 66 | le ``PhpProcess`` à la place:: 67 | 68 | use Symfony\Component\Process\PhpProcess; 69 | 70 | $process = new PhpProcess(<< 72 | EOF 73 | ); 74 | $process->run(); 75 | 76 | .. versionadded:: 2.1 77 | La classe ``ProcessBuilder`` a été ajoutée avec la version 2.1. 78 | 79 | Pour que votre code fonctionne mieux sur toutes les plateformes, vous 80 | pourriez vouloir utiliser la classe 81 | :class:`Symfony\\Component\\Process\\ProcessBuilder` à la place:: 82 | 83 | use Symfony\Component\Process\ProcessBuilder; 84 | 85 | $builder = new ProcessBuilder(array('ls', '-lsa')); 86 | $builder->getProcess()->run(); 87 | 88 | .. _Packagist: https://packagist.org/packages/symfony/process -------------------------------------------------------------------------------- /components/property_access/index.rst: -------------------------------------------------------------------------------- 1 | PropertyAccess 2 | ============== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | -------------------------------------------------------------------------------- /components/routing/index.rst: -------------------------------------------------------------------------------- 1 | Routing 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | hostname_pattern -------------------------------------------------------------------------------- /components/security/index.rst: -------------------------------------------------------------------------------- 1 | Security 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | firewall 9 | authentication 10 | authorization 11 | -------------------------------------------------------------------------------- /components/security/introduction.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Security 3 | 4 | Le composant sécurité 5 | ===================== 6 | 7 | Introduction 8 | ------------ 9 | 10 | Le composant sécurité fournit un système de sécurité complet pour vos 11 | applications web. Il est livré avec des méthodes d'authentification 12 | utilisant HTTP basic ou l'authentification digest, ou encore un formulaire 13 | interactif de login ou via le certificat X.509, mais permet également 14 | d'implémenter vos propres stratégies d'authentification. 15 | De plus, le composant offre la possibilité d'autoriser les utilisateurs 16 | en se basant sur leurs rôles, et il contient un système avancé d'ACL. 17 | 18 | 19 | Installation 20 | ------------ 21 | 22 | Vous pouvez installer le composant de deux manières différentes : 23 | 24 | * :doc:`L'installation via Composer ` (``symfony/security`` sur Packagist_); 25 | * Utilisez le repository Git officiel (https://github.com/symfony/Security). 26 | 27 | Sections 28 | -------- 29 | 30 | * :doc:`/components/security/firewall` 31 | * :doc:`/components/security/authentication` 32 | * :doc:`/components/security/authorization` 33 | 34 | .. _Packagist: https://packagist.org/packages/symfony/security 35 | -------------------------------------------------------------------------------- /components/yaml/index.rst: -------------------------------------------------------------------------------- 1 | Yaml 2 | ==== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | yaml_format -------------------------------------------------------------------------------- /contributing/code/bugs.rst: -------------------------------------------------------------------------------- 1 | Signaler un Bug 2 | =============== 3 | 4 | Quand vous trouvez un bug dans Symfony2, nous vous sommes reconnaissants de nous 5 | en avertir. Cela nous aide à rendre Symfony2 meilleur. 6 | 7 | .. caution:: 8 | 9 | Si vous pensez avoir trouvé une faille de sécurité, utilisez s'il vous 10 | plait cette :doc:`procédure` spécifique. 11 | 12 | Avant de soumettre un rapport de bug : 13 | 14 | * Vérifiez par deux fois la `documentation`_ officielle afin de vous assurer que 15 | vous utilisez le framework correctement. 16 | 17 | * Demander l'assistance d'utilisateurs de la `liste de diffusion`_, du `forum`_, 18 | ou du `canal IRC`_ #symfony (ou #symfony-fr) si vous n'êtes pas complètement certain que le 19 | comportement observé soit un bug. 20 | 21 | Si votre problème ressemble finalement à un bug, signalez-le en utilisant le 22 | `tracker`_ de bugs officiel en suivant ces règles simples : 23 | 24 | * Utilisez le champ titre pour clairement décrire le problème; 25 | 26 | * Décrivez les étapes nécessaires permettant de reproduire le bug en joignant 27 | si besoin de courts morceaux de code(fournir un test unitaire qui illustre le 28 | bug est une très bonne solution); 29 | 30 | * Donnez autant de détails que possible sur votre environnement (OS, version PHP, 31 | version Symfony, extensions actives, ...); 32 | 33 | * *(optionnel)* Joignez un :doc:`patch `. 34 | 35 | .. _documentation: http://symfony.com/doc/2.0/ 36 | .. _liste de diffusion: http://groups.google.com/group/symfony-users 37 | .. _forum: http://forum.symfony-project.org/ 38 | .. _canal IRC: irc://irc.freenode.net/symfony 39 | .. _tracker: https://github.com/symfony/symfony/issues -------------------------------------------------------------------------------- /contributing/code/index.rst: -------------------------------------------------------------------------------- 1 | Contribuer au Code 2 | ================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | bugs 8 | patches 9 | security 10 | tests 11 | standards 12 | conventions 13 | license -------------------------------------------------------------------------------- /contributing/code/license.rst: -------------------------------------------------------------------------------- 1 | License Symfony2 2 | ================ 3 | 4 | Symfony2 est réalisé sous licence MIT. 5 | 6 | D'après `Wikipedia`_: 7 | 8 | "C'est une licence de logiciel libre et open source, non copyleft, permettant 9 | donc d'inclure des modifications sous d'autres licences, y compris non 10 | libres. La licence donne à toute personne recevant le logiciel le droit 11 | illimité de l'utiliser, le copier, le modifier, le fusionner, le publier, 12 | le distribuer, le vendre et de changer sa licence. La seule obligation est de 13 | mettre le nom des auteurs avec la notice de copyright." 14 | 15 | La License 16 | ---------- 17 | 18 | Copyright (c) 2004-2012 Fabien Potencier 19 | 20 | Permission is hereby granted, free of charge, to any person obtaining a copy 21 | of this software and associated documentation files (the "Software"), to deal 22 | in the Software without restriction, including without limitation the rights 23 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 24 | copies of the Software, and to permit persons to whom the Software is furnished 25 | to do so, subject to the following conditions: 26 | 27 | The above copyright notice and this permission notice shall be included in all 28 | copies or substantial portions of the Software. 29 | 30 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 31 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 32 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 33 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 34 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 35 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 36 | THE SOFTWARE. 37 | 38 | .. _Wikipedia: http://fr.wikipedia.org/wiki/MIT_License -------------------------------------------------------------------------------- /contributing/code/security.rst: -------------------------------------------------------------------------------- 1 | Signaler une faille de sécurité 2 | =============================== 3 | 4 | Vous avez trouvé une faille de sécurité dans Symfony2 ? N'utilisez pas la liste 5 | de diffusion ou le gestionnaire de bugs. Toutes les failles de sécurités doivent 6 | être transmises à **security [at]symfony-project.com**. Les courriels envoyés 7 | à cette adresse sont retransmis à l'équipe centrale de Symfony à l'aide d'une 8 | liste de diffusion privée. 9 | 10 | Pour chaque rapport, nous essayons dans un premier temps de confirmer la 11 | vulnérabilité. Si elle est vérifiée, l'équipe centrale travaille sur une 12 | solution en suivant ces étapes : 13 | 14 | 1. Envoi d'un accusé de réception au rapporteur; 15 | 2. Travail sur un correctif; 16 | 3. Écriture d'un message décrivant la vulnérabilité, les utilisations possibles, 17 | et des moyens mis à disposition pour y pallier; 18 | 4. Application du correctif sur toutes les versions maintenues de Symfony; 19 | 5. Publication du message sur le blog officiel de Symfony. 20 | 21 | .. note:: 22 | 23 | Tant que nous travaillons sur un correctif, s'il vous plait, ne révélez pas 24 | publiquement cette faille. -------------------------------------------------------------------------------- /contributing/community/index.rst: -------------------------------------------------------------------------------- 1 | Communauté 2 | ========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | releases 8 | irc 9 | other -------------------------------------------------------------------------------- /contributing/community/other.rst: -------------------------------------------------------------------------------- 1 | Autres Ressources 2 | ================= 3 | 4 | Afin de suivre les évènements liés à la communauté, vous trouverez ces 5 | ressources supplémentaires très utiles : 6 | 7 | * La liste des requêtes de mise à jour ouvertes (`pull requests`_) 8 | * La liste des `commits`_ récents 9 | * La liste des `bugs et améliorations`_ 10 | * La liste des `bundles`_ open source 11 | 12 | .. _pull requests: https://github.com/symfony/symfony/pulls 13 | .. _commits: https://github.com/symfony/symfony/commits/master 14 | .. _bugs et améliorations: https://github.com/symfony/symfony/issues 15 | .. _bundles: http://knpbundles.com/ -------------------------------------------------------------------------------- /contributing/documentation/index.rst: -------------------------------------------------------------------------------- 1 | Participer à la Documentation 2 | ============================= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | overview 8 | format 9 | translations 10 | license -------------------------------------------------------------------------------- /contributing/documentation/license.rst: -------------------------------------------------------------------------------- 1 | License destinée à la documentation de Symfony2 2 | =============================================== 3 | 4 | La documentation Symfony2 est soumise à la licence Creative Commons 5 | Attribution-Share Alike 3.0 Unported `License`_. 6 | 7 | En voici le `résumé officiel en français`_ : 8 | 9 | Paternité - Partage à l'Identique 10 | CC BY-SA 11 | 12 | Cette licence permet aux autres de remixer, arranger, et adapter votre oeuvre, 13 | même à des fins commerciales, tant qu'on vous accorde le mérite en citant votre 14 | nom et qu'on diffuse les nouvelles créations selon des conditions identiques. 15 | Cette licence est souvent comparé aux licences de logiciels libres “open source” 16 | ou “copyleft”. Toutes les nouvelles oeuvres basées sur les vôtres auront la même 17 | licence, et toute oeuvre dérivée pourra être utilisée même à des fins 18 | commerciales. C'est la licence utilisée par Wikipédia ; elle est recommandée 19 | pour des oeuvres qui pourraient bénéficier de l'incorporation de contenu depuis 20 | Wikipédia et d'autres projets sous licence similaire. 21 | 22 | **You are free:** 23 | 24 | * to *Share* — to copy, distribute and transmit the work; 25 | 26 | * to *Remix* — to adapt the work. 27 | 28 | **Under the following conditions:** 29 | 30 | * *Attribution* — You must attribute the work in the manner specified by 31 | the author or licensor (but not in any way that suggests that they 32 | endorse you or your use of the work); 33 | 34 | * *Share Alike* — If you alter, transform, or build upon this work, you 35 | may distribute the resulting work only under the same or similar license 36 | to this one. 37 | 38 | **With the understanding that:** 39 | 40 | * *Waiver* — Any of the above conditions can be waived if you get 41 | permission from the copyright holder; 42 | 43 | * *Public Domain* — Where the work or any of its elements is in the public 44 | domain under applicable law, that status is in no way affected by the 45 | license; 46 | 47 | * *Other Rights* — In no way are any of the following rights affected by the 48 | license: 49 | 50 | * Your fair dealing or fair use rights, or other applicable copyright 51 | exceptions and limitations; 52 | 53 | * The author's moral rights; 54 | 55 | * Rights other persons may have either in the work itself or in how 56 | the work is used, such as publicity or privacy rights. 57 | 58 | * *Notice* — For any reuse or distribution, you must make clear to others 59 | the license terms of this work. The best way to do this is with a link 60 | to this web page. 61 | 62 | This is a human-readable summary of the `Legal Code (the full license)`_. 63 | 64 | .. _résumé officiel en français: http://creativecommons.org/licenses/ 65 | .. _License: http://creativecommons.org/licenses/by-sa/3.0/ 66 | .. _Legal Code (the full license): http://creativecommons.org/licenses/by-sa/3.0/legalcode -------------------------------------------------------------------------------- /contributing/index.rst: -------------------------------------------------------------------------------- 1 | Contribuer 2 | ========== 3 | 4 | .. toctree:: 5 | :hidden: 6 | 7 | code/index 8 | documentation/index 9 | community/index 10 | 11 | .. include:: /contributing/map.rst.inc -------------------------------------------------------------------------------- /contributing/map.rst.inc: -------------------------------------------------------------------------------- 1 | * **Code** 2 | 3 | * :doc:`Bugs ` 4 | * :doc:`Patches ` 5 | * :doc:`Sécurité ` 6 | * :doc:`Tests ` 7 | * :doc:`Standards syntaxiques` 8 | * :doc:`Conventions de codage` 9 | * :doc:`Licence ` 10 | 11 | * **Documentation** 12 | 13 | * :doc:`Résumé ` 14 | * :doc:`Format ` 15 | * :doc:`Traductions ` 16 | * :doc:`License ` 17 | 18 | * **Communauté** 19 | 20 | * :doc:`Processus de sortie de versions ` 21 | * :doc:`Réunions IRC ` 22 | * :doc:`Autres ressources ` -------------------------------------------------------------------------------- /cookbook/assetic/index.rst: -------------------------------------------------------------------------------- 1 | Assetic 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | asset_management 8 | yuicompressor 9 | jpeg_optimize 10 | apply_to_option 11 | -------------------------------------------------------------------------------- /cookbook/bundles/index.rst: -------------------------------------------------------------------------------- 1 | Bundles 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | best_practices 8 | inheritance 9 | override 10 | remove 11 | extension 12 | -------------------------------------------------------------------------------- /cookbook/cache/index.rst: -------------------------------------------------------------------------------- 1 | Cache 2 | ===== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | varnish 8 | -------------------------------------------------------------------------------- /cookbook/configuration/index.rst: -------------------------------------------------------------------------------- 1 | Configuration 2 | ============= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | environments 8 | override_dir_structure 9 | external_parameters 10 | pdo_session_storage 11 | apache_router 12 | web_server_configuration -------------------------------------------------------------------------------- /cookbook/console/index.rst: -------------------------------------------------------------------------------- 1 | Console 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | console_command 8 | usage 9 | sending_emails 10 | logging 11 | -------------------------------------------------------------------------------- /cookbook/console/usage.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Console; Usage 3 | 4 | Comment utiliser la Console 5 | =========================== 6 | 7 | La page :doc:`/components/console/usage` de la documentation des Composants 8 | traite des options de la console. Lorsque vous utilisez la console comme partie 9 | intégrante du framework full-stack, des options globales supplémentaires sont 10 | également disponibles. 11 | 12 | Par défaut, les commandes de la console sont exécutées dans l'environnement de 13 | ``dev``, vous pourriez vouloir changer cela pour certaines commandes. Par exemple, 14 | vous pourriez vouloir exécuter certaines commandes dans l'environnement de ``prod`` 15 | pour des raisons de performance. Le résultat de certaines commandes sera différent 16 | selon l'environnement, par exemple, la commande ``cache:clear`` ne videra le cache 17 | que de l'environnement spécifié. Pour vider le cache de ``prod``, vous devez exécuter : 18 | 19 | .. code-block:: bash 20 | 21 | $ php app/console cache:clear --env=prod 22 | 23 | ou son équivalent : 24 | 25 | .. code-block:: bash 26 | 27 | $ php app/console cache:clear -e prod 28 | 29 | En plus de changer l'environnement, vous pouvez également choisir de 30 | désactiver le mode debug. Cela peut être utile lorsque vous voulez exécuter des 31 | commandes dans l'environnement de ``dev`` mais éviter de dégrader les performances 32 | en collectant des données de debug : 33 | 34 | .. code-block:: bash 35 | 36 | $ php app/console list --no-debug 37 | 38 | Il existe un shell interactive qui vous permet de taper des commandes sans devoir 39 | spécifier ``php app/console`` à chaque fois, ce qui est très utile si vous devez saisir 40 | plusieurs commandes. Pour entrer dans le shell, exécutez : 41 | 42 | .. code-block:: bash 43 | 44 | $ php app/console --shell 45 | $ php app/console -s 46 | 47 | Vous pouvez maintenant vous contenter de saisir simplement le nom de la commande : 48 | 49 | .. code-block:: bash 50 | 51 | Symfony > list 52 | 53 | Lorsque vous utilisez le shell, vous pouvez choisir d'exécuter chaque commande 54 | dans un processus distinct : 55 | 56 | .. code-block:: bash 57 | 58 | $ php app/console --shell --process-isolation 59 | $ php app/console -s --process-isolation 60 | 61 | Lorsque vous faites cela, la sortie ne sera pas colorisée et l'interactivité 62 | n'est pas supportée, vous devrez donc passer chaque paramètre explicitement. 63 | 64 | .. note:: 65 | 66 | A moins que vous n'utilisiez des processus séparés, vider le cache dans 67 | le shell n'aura aucun effet sur les commandes que vous exécutez. Ceci est 68 | dû au fait que les fichiers de cache originaux sont toujours utilisés. -------------------------------------------------------------------------------- /cookbook/controller/index.rst: -------------------------------------------------------------------------------- 1 | Contrôleurs 2 | =========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | error_pages 8 | service 9 | -------------------------------------------------------------------------------- /cookbook/debugging.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Debugging 3 | 4 | Comment optimiser votre environnement pour le debuggage 5 | ======================================================= 6 | 7 | Quand vous travaillez sur un projet Symfony sur votre machine locale, vous 8 | devriez utiliser l'environnement ``dev`` (correspondant au contrôleur frontal 9 | ``app_dev.php``). Cet environnement est optimisé pour : 10 | 11 | * Donner au développeur des informations rapides et claires si quelque chose ne 12 | se déroule pas comme prévu (à l'aide de la web debug toolbar, d'exceptions 13 | documentées et présentées clairement, du profiler, ...) ; 14 | 15 | * Être aussi proche que possible à l'environnement de production afin de 16 | préparer le déploiement du projet. 17 | 18 | .. _cookbook-debugging-disable-bootstrap: 19 | 20 | Désactiver le bootstrap et le cache des classes 21 | ----------------------------------------------- 22 | 23 | Pour rendre l'environnement de production aussi rapide que possible, Symfony 24 | crée de longs fichiers PHP dans le dossier cache, qui correspondent à 25 | l'aggrégation des classes PHP dont votre projet a besoin à chaque requête. 26 | Cependant, ce comportement peut désorienter votre IDE ou votre debugger. Nous 27 | allons vous montrer ici comment modifier le mécanisme de cache afin qu'il 28 | permette un débuggage des classes intégrées à Symfony. 29 | 30 | Le contrôleur frontal ``app_dev.php`` se compose par défaut du code suivant:: 31 | 32 | // ... 33 | 34 | require_once __DIR__.'/../app/bootstrap.php.cache'; 35 | require_once __DIR__.'/../app/AppKernel.php'; 36 | 37 | use Symfony\Component\HttpFoundation\Request; 38 | 39 | $kernel = new AppKernel('dev', true); 40 | $kernel->loadClassCache(); 41 | $kernel->handle(Request::createFromGlobals())->send(); 42 | 43 | Pour faciliter le travail du debugger, désactivez le cache des classes PHP en 44 | supprimant l'appel ``loadClassCache()`` et en replaçant les fichiers requis comme 45 | ceci:: 46 | 47 | // ... 48 | 49 | // require_once __DIR__.'/../app/bootstrap.php.cache'; 50 | require_once __DIR__.'/../app/autoload.php'; 51 | require_once __DIR__.'/../app/AppKernel.php'; 52 | 53 | use Symfony\Component\HttpFoundation\Request; 54 | 55 | $kernel = new AppKernel('dev', true); 56 | // $kernel->loadClassCache(); 57 | $kernel->handle(Request::createFromGlobals())->send(); 58 | 59 | .. tip:: 60 | 61 | Si vous désactivez le cache des classes, n'oubliez pas de revenir aux 62 | réglages initiaux après votre session de débuggage. 63 | 64 | Certains IDEs n'apprécient pas que certaines classes soient enregistrées à 65 | différents emplacements. Pour prévenir ces problèmes, vous pouvez désactiver la 66 | lecture du dossier cache dans votre IDE, ou changer l'extension utilisée par 67 | Symfony pour ces fichiers:: 68 | 69 | $kernel->loadClassCache('classes', '.php.cache'); 70 | -------------------------------------------------------------------------------- /cookbook/doctrine/common_extensions.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Doctrine; Common extensions 3 | 4 | Comment utiliser les extensions Doctrine: Timestampable, Sluggable, Translatable, etc. 5 | ====================================================================================== 6 | 7 | Doctrine2 est très flexible, et la communauté a déjà créé une série d'extensions 8 | Doctrine très pratiques afin de vous aider avec les tâches usuelles liées aux 9 | entités. 10 | 11 | Une bibliothèque en particulier - la bibliothèque `DoctrineExtensions`_ - fournit 12 | l'intégration de fonctionnalités pour les comportements (Behaviors) `Sluggable`_, 13 | `Translatable`_, `Timestampable`_, `Loggable`_, `Tree`_ et `Sortable`_ 14 | 15 | L'utilisation de chacune de ces extensions est expliquée dans son dépôt. 16 | 17 | Toutefois, pour installer/activer chaque extension, vous devez enregistrer 18 | et activer un :doc:`Ecouteur d'évènement (Event Listener)`. 19 | Pour faire cela, vous avez deux possibilités : 20 | 21 | #. Utiliser le bundle `StofDoctrineExtensionsBundle`_, qui intègre la bibliothèque ci-dessus. 22 | 23 | #. Implémenter ces services directement en suivant la documentation pour l'intégration dans 24 | Symfony2 : `Installer les extensions Gedmo Doctrine2 dans Symfony2`_ 25 | 26 | .. _`DoctrineExtensions`: https://github.com/l3pp4rd/DoctrineExtensions 27 | .. _`StofDoctrineExtensionsBundle`: https://github.com/stof/StofDoctrineExtensionsBundle 28 | .. _`Sluggable`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/sluggable.md 29 | .. _`Translatable`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md 30 | .. _`Timestampable`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md 31 | .. _`Loggable`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/loggable.md 32 | .. _`Tree`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/tree.md 33 | .. _`Sortable`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/sortable.md 34 | .. _`Installer les extensions Gedmo Doctrine2 dans Symfony2`: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/symfony2.md -------------------------------------------------------------------------------- /cookbook/doctrine/index.rst: -------------------------------------------------------------------------------- 1 | Doctrine 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | file_uploads 8 | common_extensions 9 | event_listeners_subscribers 10 | dbal 11 | reverse_engineering 12 | multiple_entity_managers 13 | custom_dql_functions 14 | resolve_target_entity 15 | registration_form -------------------------------------------------------------------------------- /cookbook/email/gmail.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Emails; Gmail 3 | 4 | Comment utiliser Gmail pour envoyer des Emails 5 | ============================================== 6 | 7 | Durant le développement, au lieu d'utiliser un serveur SMTP ordinaire pour 8 | envoyer des emails, vous pourriez trouver qu'utiliser Gmail soit plus 9 | facile ou plus pratique. Le bundle Swiftmailer rend cela vraiment facile. 10 | 11 | .. tip:: 12 | 13 | Au lieu d'utiliser votre compte Gmail courant, il est bien sûr recommandé 14 | que vous créiez un compte spécial. 15 | 16 | Dans le fichier de configuration de développement, changez le paramètre 17 | ``transport`` pour qu'il contienne la valeur ``gmail`` et définissez les 18 | paramètres ``username`` et ``password`` avec les informations d'accès de 19 | Google : 20 | 21 | .. configuration-block:: 22 | 23 | .. code-block:: yaml 24 | 25 | # app/config/config_dev.yml 26 | swiftmailer: 27 | transport: gmail 28 | username: your_gmail_username 29 | password: your_gmail_password 30 | 31 | .. code-block:: xml 32 | 33 | 34 | 35 | 39 | 40 | 44 | 45 | .. code-block:: php 46 | 47 | // app/config/config_dev.php 48 | $container->loadFromExtension('swiftmailer', array( 49 | 'transport' => "gmail", 50 | 'username' => "your_gmail_username", 51 | 'password' => "your_gmail_password", 52 | )); 53 | 54 | Vous avez terminé ! 55 | 56 | .. note:: 57 | 58 | Le transport ``gmail`` est simplement un raccourci qui utilise le transport 59 | ``smtp`` et définit ``encryption``, ``auth_mode`` et ``host`` afin que cela 60 | fonctionne avec Gmail. 61 | -------------------------------------------------------------------------------- /cookbook/email/index.rst: -------------------------------------------------------------------------------- 1 | Email 2 | ===== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | email 8 | gmail 9 | dev_environment 10 | spool 11 | -------------------------------------------------------------------------------- /cookbook/event_dispatcher/index.rst: -------------------------------------------------------------------------------- 1 | Le répartiteur d'évènements 2 | =========================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | before_after_filters 8 | class_extension 9 | method_behavior 10 | 11 | -------------------------------------------------------------------------------- /cookbook/event_dispatcher/method_behavior.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Dispatcher d'Évènements 3 | 4 | Comment personnaliser le Comportement d'une Méthode sans utiliser l'Héritage 5 | ============================================================================ 6 | 7 | Faire quelque chose avant ou après l'Appel d'une Méthode 8 | -------------------------------------------------------- 9 | 10 | Si vous souhaitez faire quelque chose juste avant, ou juste après qu'une méthode 11 | a été appelée, vous pouvez « dispatcher » un évènement respectivement au 12 | début ou à la fin d'une méthode:: 13 | 14 | class Foo 15 | { 16 | // ... 17 | 18 | public function send($foo, $bar) 19 | { 20 | // faites quelque chose avant le début de la méthode 21 | $event = new FilterBeforeSendEvent($foo, $bar); 22 | $this->dispatcher->dispatch('foo.pre_send', $event); 23 | 24 | // récupérez $foo et $bar depuis l'évènement, ils pourraient 25 | // avoir été modifiés 26 | $foo = $event->getFoo(); 27 | $bar = $event->getBar(); 28 | 29 | // l'implémentation réelle est ici 30 | $ret = ...; 31 | 32 | // faites quelque chose après la fin de la méthode 33 | $event = new FilterSendReturnValue($ret); 34 | $this->dispatcher->dispatch('foo.post_send', $event); 35 | 36 | return $event->getReturnValue(); 37 | } 38 | } 39 | 40 | Dans cet exemple, deux évènements sont lancés : ``foo.pre_send``, avant que la 41 | méthode soit exécutée, et ``foo.post_send`` après que la méthode est exécutée. 42 | Chacun utilise une classe Event personnalisée pour communiquer des informations 43 | aux listeners des deux évènements. Ces classes d'évènements devraient être créées 44 | par vous-même et devraient permettre, dans cet exemple, aux variables ``$foo``, 45 | ``$bar`` et ``$ret`` d'être récupérées et définies par les listeners. 46 | 47 | Par exemple, supposons que ``FilterSendReturnValue`` possède une méthode 48 | ``setReturnValue``, un listener pourrait alors ressembler à ceci : 49 | 50 | .. code-block:: php 51 | 52 | public function onFooPostSend(FilterSendReturnValue $event) 53 | { 54 | $ret = $event->getReturnValue(); 55 | // modifie la valeur originale de ``$ret`` 56 | 57 | $event->setReturnValue($ret); 58 | } 59 | -------------------------------------------------------------------------------- /cookbook/form/index.rst: -------------------------------------------------------------------------------- 1 | Formulaire 2 | ========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | form_customization 8 | data_transformers 9 | dynamic_form_modification 10 | form_collections 11 | create_custom_field_type 12 | create_form_type_extension 13 | inherit_data_option 14 | unit_testing 15 | use_empty_data 16 | direct_submit 17 | 18 | .. toctree:: 19 | :hidden: 20 | 21 | use_virtuals_forms -------------------------------------------------------------------------------- /cookbook/index.rst: -------------------------------------------------------------------------------- 1 | Le Cookbook 2 | =========== 3 | 4 | .. toctree:: 5 | :hidden: 6 | 7 | assetic/index 8 | bundles/index 9 | cache/index 10 | configuration/index 11 | console/index 12 | controller/index 13 | debugging 14 | deployment_tools 15 | doctrine/index 16 | email/index 17 | event_dispatcher/index 18 | form/index 19 | logging/index 20 | profiler/index 21 | request/index 22 | routing/index 23 | security/index 24 | serializer 25 | service_container/index 26 | session/index 27 | symfony1 28 | templating/index 29 | testing/index 30 | validation/index 31 | web_services/index 32 | workflow/index 33 | 34 | .. include:: /cookbook/map.rst.inc 35 | -------------------------------------------------------------------------------- /cookbook/logging/index.rst: -------------------------------------------------------------------------------- 1 | Logging 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | monolog 8 | monolog_email 9 | channels_handlers 10 | -------------------------------------------------------------------------------- /cookbook/profiler/index.rst: -------------------------------------------------------------------------------- 1 | Profileur 2 | ========= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | data_collector 8 | -------------------------------------------------------------------------------- /cookbook/request/index.rst: -------------------------------------------------------------------------------- 1 | Requête 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | mime_type 8 | -------------------------------------------------------------------------------- /cookbook/routing/index.rst: -------------------------------------------------------------------------------- 1 | Routage 2 | ======= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | scheme 8 | slash_in_parameter 9 | redirect_in_config 10 | method_parameters 11 | service_container_parameters 12 | custom_route_loader 13 | redirect_trailing_slash 14 | -------------------------------------------------------------------------------- /cookbook/routing/redirect_in_config.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Routing; Configure redirect to another route without a custom controller 3 | 4 | Comment configurer une redirection vers une autre route sans contrôleur personnalisé 5 | ==================================================================================== 6 | 7 | Ce guide explique comment configurer une redirection d'une route vers une autre 8 | sans utiliser de contrôleur spécifique. 9 | 10 | Supposez qu'il n'existe pas de contrôleur par défaut pour l'URL ``/`` de votre 11 | application et que vous voulez rediriger ces requêtes vers ``/app``. 12 | 13 | Votre configuration ressemblerait à ceci : 14 | 15 | .. code-block:: yaml 16 | 17 | AppBundle: 18 | resource: "@App/Controller/" 19 | type: annotation 20 | prefix: /app 21 | 22 | root: 23 | path: / 24 | defaults: 25 | _controller: FrameworkBundle:Redirect:urlRedirect 26 | path: /app 27 | permanent: true 28 | 29 | Dans cet exemple, vous configurez une route pour le chemin ``/`` et laissez 30 | la classe :class:`Symfony\\Bundle\\FrameworkBundle\\Controller\\RedirectController` 31 | la gérer. Ce contrôleur est fourni avec Symfony et propose deux actions pour 32 | rediriger les requêtes : 33 | 34 | * ``urlRedirect`` redirige vers un autre *chemin*. Vous devez spécifier le paramètre ``path`` 35 | pour qu'il contienne le chemin vers la ressource vers laquelle vous voulez rediriger. 36 | 37 | * ``redirect`` (pas montré ici) redirige vers une autre *route*. Vous devez définir le 38 | paramètre ``route`` avec le *nom* de la route vers laquelle vous voulez rediriger. 39 | 40 | Le paramètre ``permanent`` indique aux deux méthodes de retourner un code de statut 41 | HTTP 301 au lieu du code ``302`` par défaut. 42 | -------------------------------------------------------------------------------- /cookbook/routing/scheme.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Routage; Exigence système 3 | 4 | Comment forcer les routes à toujours utiliser HTTPS ou HTTP 5 | =========================================================== 6 | 7 | Quelquefois, vous voulez sécuriser certaines routes et être sûr qu'on y 8 | accède toujours via le protocole HTTPS. Le composant « Routing » 9 | vous permet de forcer le système de l'URI via la condition requise 10 | ``_scheme`` : 11 | 12 | .. configuration-block:: 13 | 14 | .. code-block:: yaml 15 | 16 | secure: 17 | pattern: /secure 18 | defaults: { _controller: AcmeDemoBundle:Main:secure } 19 | requirements: 20 | _scheme: https 21 | 22 | .. code-block:: xml 23 | 24 | 25 | 26 | 29 | 30 | 31 | AcmeDemoBundle:Main:secure 32 | https 33 | 34 | 35 | 36 | .. code-block:: php 37 | 38 | use Symfony\Component\Routing\RouteCollection; 39 | use Symfony\Component\Routing\Route; 40 | 41 | $collection = new RouteCollection(); 42 | $collection->add('secure', new Route('/secure', array( 43 | '_controller' => 'AcmeDemoBundle:Main:secure', 44 | ), array( 45 | '_scheme' => 'https', 46 | ))); 47 | 48 | return $collection; 49 | 50 | La configuration ci-dessus force la route nommée ``secure`` à toujours 51 | utiliser HTTPS. 52 | 53 | Pendant la génération de l'URL de ``secure``, et si le système actuel est 54 | HTTP, Symfony va automatiquement générer une URL absolue avec HTTPS comme 55 | « scheme » : 56 | 57 | .. code-block:: jinja 58 | 59 | {# Si le « scheme » actuel est HTTPS #} 60 | {{ path('secure') }} 61 | {# génère /secure 62 | 63 | {# Si le « scheme » actuel est HTTP #} 64 | {{ path('secure') }} 65 | {# génère https://example.com/secure #} 66 | 67 | La condition requise est aussi forcée pour les requêtes entrantes. Si vous 68 | essayez d'accéder au chemin ``/secure`` avec HTTP, vous serez automatiquement 69 | redirigé à la même URL, mais avec le « scheme » HTTPS. 70 | 71 | Les exemples ci-dessus utilisent ``https`` en tant que ``_scheme``, mais vous 72 | pouvez aussi forcer une URL à toujours utiliser ``http``. 73 | 74 | .. note:: 75 | 76 | Le composant Security fournit une autre façon d'imposer HTTP ou HTTPS via 77 | le paramètre ``requires_channel``. Cette méthode alternative est mieux 78 | adaptée pour sécuriser une « zone » de votre site web (toutes les URLs dans 79 | la zone ``/admin``) ou pour sécuriser les URLs définies dans un bundle tiers. 80 | -------------------------------------------------------------------------------- /cookbook/routing/slash_in_parameter.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Routage; Autoriser un / dans un paramètre de route 3 | 4 | Comment autoriser un caractère « / » dans un paramètre de route 5 | =============================================================== 6 | 7 | Parfois, on a besoin de construire des URLs avec des paramètres qui 8 | peuvent contenir un slash ``/``. Prenons par exemple la route classique 9 | ``/hello/{name}``. Par défaut, ``/hello/Fabien`` va correspondre à cette 10 | route mais pas ``/hello/Fabien/Kris``. Cela est dû au fait que Symfony 11 | utilise ce caractère comme séparateur entre les parties de la route. 12 | 13 | Ce guide explique comment vous pouvez modifier une route afin que 14 | ``/hello/Fabien/Kris`` corresponde à la route ``/hello/{name}``, où ``{name}`` 15 | équivaut à ``Fabien/Kris``. 16 | 17 | Configurer la Route 18 | ------------------- 19 | 20 | Par défaut, les composants de routage de Symfony requièrent que les paramètres 21 | correspondent au pattern de regex suivant : ``[^/]+``. Cela veut dire que tous 22 | les caractères sont autorisés sauf ``/``. 23 | 24 | Vous devez explicitement autoriser le caractère ``/`` à faire partie de votre 25 | paramètre en spécifiant un pattern de regex plus permissif. 26 | 27 | .. configuration-block:: 28 | 29 | .. code-block:: yaml 30 | 31 | _hello: 32 | pattern: /hello/{name} 33 | defaults: { _controller: AcmeDemoBundle:Demo:hello } 34 | requirements: 35 | name: ".+" 36 | 37 | .. code-block:: xml 38 | 39 | 40 | 41 | 44 | 45 | 46 | AcmeDemoBundle:Demo:hello 47 | .+ 48 | 49 | 50 | 51 | .. code-block:: php 52 | 53 | use Symfony\Component\Routing\RouteCollection; 54 | use Symfony\Component\Routing\Route; 55 | 56 | $collection = new RouteCollection(); 57 | $collection->add('_hello', new Route('/hello/{name}', array( 58 | '_controller' => 'AcmeDemoBundle:Demo:hello', 59 | ), array( 60 | 'name' => '.+', 61 | ))); 62 | 63 | return $collection; 64 | 65 | .. code-block:: php-annotations 66 | 67 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 68 | 69 | class DemoController 70 | { 71 | /** 72 | * @Route("/hello/{name}", name="_hello", requirements={"name" = ".+"}) 73 | */ 74 | public function helloAction($name) 75 | { 76 | // ... 77 | } 78 | } 79 | 80 | C'est tout ! Maintenant, le paramètre ``{name}`` peut contenir le caractère ``/``. -------------------------------------------------------------------------------- /cookbook/security/force_https.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Security; Force HTTPS 3 | 4 | Comment forcer HTTPS ou HTTP pour des URLs Différentes 5 | ====================================================== 6 | 7 | Vous pouvez forcer certaines parties de votre site à utiliser le protocole ``HTTPS`` 8 | dans la configuration de la sécurité. Cela s'effectue grâce aux règles 9 | ``access_control`` en utilisant l'option ``requires_channel``. Par exemple, si vous 10 | voulez forcer toutes les URLs commençant par ``/secure`` à utiliser ``HTTPS``, alors 11 | vous pourriez utiliser la configuration suivante : 12 | 13 | .. configuration-block:: 14 | 15 | .. code-block:: yaml 16 | 17 | access_control: 18 | - path: ^/secure 19 | roles: ROLE_ADMIN 20 | requires_channel: https 21 | 22 | .. code-block:: xml 23 | 24 | 25 | 26 | 27 | 28 | .. code-block:: php 29 | 30 | 'access_control' => array( 31 | array('path' => '^/secure', 32 | 'role' => 'ROLE_ADMIN', 33 | 'requires_channel' => 'https' 34 | ), 35 | ), 36 | 37 | Le formulaire de login lui-même a besoin d'autoriser un accès anonyme, sinon 38 | les utilisateurs seront incapables de s'authentifier. Pour le forcer à utiliser 39 | ``HTTPS`` vous pouvez toujours utiliser les règles de ``access_control`` en 40 | vous servant du rôle ``IS_AUTHENTICATED_ANONYMOUSLY`` : 41 | 42 | .. configuration-block:: 43 | 44 | .. code-block:: yaml 45 | 46 | access_control: 47 | - path: ^/login 48 | roles: IS_AUTHENTICATED_ANONYMOUSLY 49 | requires_channel: https 50 | 51 | .. code-block:: xml 52 | 53 | 54 | 57 | 58 | 59 | .. code-block:: php 60 | 61 | 'access_control' => array( 62 | array('path' => '^/login', 63 | 'role' => 'IS_AUTHENTICATED_ANONYMOUSLY', 64 | 'requires_channel' => 'https' 65 | ), 66 | ), 67 | 68 | Il est aussi possible de spécifier l'utilisation d'``HTTPS`` dans la 69 | configuration de routage, lisez :doc:`/cookbook/routing/scheme` pour 70 | plus de détails. 71 | -------------------------------------------------------------------------------- /cookbook/security/index.rst: -------------------------------------------------------------------------------- 1 | Sécurité 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | entity_provider 8 | remember_me 9 | voters 10 | acl 11 | acl_advanced 12 | force_https 13 | form_login 14 | securing_services 15 | custom_provider 16 | custom_authentication_provider 17 | target_path 18 | -------------------------------------------------------------------------------- /cookbook/service_container/compiler_passes.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Dependency Injection; Compiler passes 3 | single: Service Container; Compiler passes 4 | 5 | Comment travailler avec les Passes de Compilation dans les Bundles 6 | ================================================================== 7 | 8 | Les passes de compilation vous donnent l'opportunité de manipuler d'autres 9 | définitions de service qui ont été définies via le conteneur de service. 10 | Pour savoir comment les créer, vous pouvez lire la section des composants 11 | « :doc:`/components/dependency_injection/compilation` ». Pour définir une 12 | passe de compilation depuis un bundle, vous devez l'ajouter à la méthode 13 | build se situant dans la classe du bundle:: 14 | 15 | // src/Acme/MailerBundle/AcmeMailerBundle.php 16 | namespace Acme\MailerBundle; 17 | 18 | use Symfony\Component\HttpKernel\Bundle\Bundle; 19 | use Symfony\Component\DependencyInjection\ContainerBuilder; 20 | 21 | use Acme\MailerBundle\DependencyInjection\Compiler\CustomCompilerPass; 22 | 23 | class AcmeMailerBundle extends Bundle 24 | { 25 | public function build(ContainerBuilder $container) 26 | { 27 | parent::build($container); 28 | 29 | $container->addCompilerPass(new CustomCompilerPass()); 30 | } 31 | } 32 | 33 | L'un des cas d'utilisation les plus fréquents des passes de compilation est lorsque 34 | vous travaillez avec des services taggés (apprenez-en plus à propos des tags en lisant 35 | la section sur les composants « :doc:`/components/dependency_injection/tags` »). 36 | Si vous utilisez des tags personnalisés dans un bundle, alors par convention, les noms 37 | de tag se constituent du nom du bundle (en minuscules, avec des tirets du bas en tant 38 | que séparateurs), suivi par un point, et finalement le nom « réel ». Par exemple, si 39 | vous voulez introduire un tag « transport » dans votre AcmeMailerBundle, vous devriez 40 | l'appeler ``acme_mailer.transport``. 41 | -------------------------------------------------------------------------------- /cookbook/service_container/index.rst: -------------------------------------------------------------------------------- 1 | Conteneur de Service 2 | ==================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | event_listener 8 | scopes 9 | compiler_passes 10 | -------------------------------------------------------------------------------- /cookbook/session/index.rst: -------------------------------------------------------------------------------- 1 | Sessions 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | proxy_examples 8 | locale_sticky_session 9 | sessions_directory 10 | php_bridge 11 | limit_metadata_writes 12 | -------------------------------------------------------------------------------- /cookbook/session/proxy_examples.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Sessions, Session Proxy, Proxy 3 | 4 | Exemple de Session Proxy 5 | ======================== 6 | 7 | Le mécanisme de proxy de session possède une variété d'utilisations et cet exemple 8 | présente deux utilisations communes. Plutôt que d'injecter un session handler 9 | comme d'habitude, un handler est injecté dans le proxy et est enregistré avec 10 | un pilote de stockage de session :: 11 | 12 | use Symfony\Component\HttpFoundation\Session\Session; 13 | use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; 14 | use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler; 15 | 16 | $proxy = new YourProxy(new PdoSessionHandler()); 17 | $session = new Session(new NativeSessionStorage(array(), $proxy)); 18 | 19 | Plus bas, vous apprendrez deux réels exemples qui peuvent être utilisés pour la 20 | classe ``YourProxy`` : le chiffrement des données de session et les sessions 21 | invitées en lecture seules. 22 | 23 | Chiffrement des Données en Session 24 | ---------------------------------- 25 | 26 | Si vous vouliez chiffrer les données en session, vous pouvez utiliser le proxy 27 | pour chiffrer ou déchiffrer la session comme suit :: 28 | 29 | use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy; 30 | 31 | class EncryptedSessionProxy extends SessionHandlerProxy 32 | { 33 | private $key; 34 | 35 | public function __construct(\SessionHandlerInterface $handler, $key) 36 | { 37 | $this->key = $key; 38 | 39 | parent::__construct($handler); 40 | } 41 | 42 | public function read($id) 43 | { 44 | $data = parent::read($id); 45 | 46 | return mcrypt_decrypt(\MCRYPT_3DES, $this->key, $data); 47 | } 48 | 49 | public function write($id, $data) 50 | { 51 | $data = mcrypt_encrypt(\MCRYPT_3DES, $this->key, $data); 52 | 53 | return parent::write($id, $data); 54 | } 55 | } 56 | 57 | Les sessions invitées en lecture seule 58 | -------------------------------------- 59 | 60 | Il y a quelques applications où une session est requise pour les utilisateurs 61 | invités, mais il n'y a pas spécialement besoin de persister cette session. Dans 62 | ce cas vous pouvez intercepter la session avant qu'elle ne soit écrite :: 63 | 64 | use Foo\User; 65 | use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy; 66 | 67 | class ReadOnlyGuestSessionProxy extends SessionHandlerProxy 68 | { 69 | private $user; 70 | 71 | public function __construct(\SessionHandlerInterface $handler, User $user) 72 | { 73 | $this->user = $user; 74 | 75 | parent::__construct($handler); 76 | } 77 | 78 | public function write($id, $data) 79 | { 80 | if ($this->user->isGuest()) { 81 | return; 82 | } 83 | 84 | return parent::write($id, $data); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /cookbook/templating/index.rst: -------------------------------------------------------------------------------- 1 | Templates 2 | ========= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | global_variables 8 | namespaced_paths 9 | PHP 10 | twig_extension 11 | render_without_controller 12 | -------------------------------------------------------------------------------- /cookbook/templating/namespaced_paths.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Templating; Chemins Twig Namespacés 3 | 4 | Comment utiliser et enregistrer des chemins Twig namespacés 5 | =========================================================== 6 | 7 | Habituellement, lorsque vous vous référez à un template, vous allez utiliser le format 8 | ``MyBundle:Subdir:filename.html.twig`` (consultez :ref:`template-naming-locations`). 9 | 10 | Twig offre également nativement une fonctionnalité appelée "chemins namespacés" 11 | ("namespaced paths" en anglais), et elle est intégrée automatiquement dans vos bundles. 12 | 13 | Prenons les chemins suivants comme exemple : 14 | 15 | .. code-block:: jinja 16 | 17 | {% extends "AcmeDemoBundle::layout.html.twig" %} 18 | {% include "AcmeDemoBundle:Foo:bar.html.twig" %} 19 | 20 | Avec les chemins namespacés, ce qui suit fonctionne également : 21 | 22 | .. code-block:: jinja 23 | 24 | {% extends "@AcmeDemo/layout.html.twig" %} 25 | {% include "@AcmeDemo/Foo/bar.html.twig" %} 26 | 27 | Les deux chemins sont valides et fonctionnel par défaut en Symfony2. 28 | 29 | .. tip:: 30 | 31 | Comme bonus, la syntaxe namespacée est plus rapide. 32 | 33 | Enregistrer vos propres namespaces 34 | ---------------------------------- 35 | 36 | Vous pouvez également enregistrer vos propes namespaces. Supposez que vous 37 | utilisez une quelconque bibliothèque tierce incluant des templates Twig 38 | placés dans ``vendor/acme/foo-bar/templates``. Premièrement, enregistrez un 39 | namespace pour pour ce dossier : 40 | 41 | .. configuration-block:: 42 | 43 | .. code-block:: yaml 44 | 45 | # app/config/config.yml 46 | twig: 47 | # ... 48 | paths: 49 | "%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar 50 | 51 | .. code-block:: xml 52 | 53 | 54 | 55 | 59 | 60 | 61 | %kernel.root_dir%/../vendor/acme/foo-bar/templates 62 | 63 | 64 | 65 | .. code-block:: php 66 | 67 | // app/config/config.php 68 | $container->loadFromExtension('twig', array( 69 | 'paths' => array( 70 | '%kernel.root_dir%/../vendor/acme/foo-bar/templates' => 'foo_bar', 71 | ); 72 | )); 73 | 74 | Le namespace enregistré est appelé ``foo_bar``, se référant au dossier 75 | ``vendor/acme/foo-bar/templates``. Supposant qu'il y est un fichier 76 | nommé ``sidebar.twig`` dans ce dossier, vous pouvez utiliser facilement : 77 | 78 | .. code-block:: jinja 79 | 80 | {% include '@foo_bar/side.bar.twig' %} 81 | -------------------------------------------------------------------------------- /cookbook/testing/bootstrap.rst: -------------------------------------------------------------------------------- 1 | Comment personnaliser le processus de bootstrap avant les tests 2 | =============================================================== 3 | 4 | Parfois, lorsque vous lancez des tests, vous avez besoin d'ajouter 5 | des choses au processus d'initialisation (bootstrap) juste avant 6 | de les lancer. Par exemple, si vous lancez un test fonctionnel et que 7 | vous avez introduit une nouvelle ressource de traduction, alors vous devrez 8 | vider votre cache avant de lancer ces tests. Cet article vous explique comment 9 | faire 10 | 11 | D'abord, ajouter le fichier suivant:: 12 | 13 | // app/tests.bootstrap.php 14 | if (isset($_ENV['BOOTSTRAP_CLEAR_CACHE_ENV'])) { 15 | passthru(sprintf( 16 | 'php "%s/console" cache:clear --env=%s --no-warmup', 17 | __DIR__, 18 | $_ENV['BOOTSTRAP_CLEAR_CACHE_ENV'] 19 | )); 20 | } 21 | 22 | require __DIR__.'/bootstrap.php.cache'; 23 | 24 | Remplacer le fichier de test bootstrap ``bootstrap.php.cache`` dans 25 | ``app/phpunit.xml.dist`` par ``tests.bootstrap.php`` : 26 | 27 | .. code-block:: xml 28 | 29 | 30 | bootstrap = "tests.bootstrap.php" 31 | 32 | Maintenant, vous pouvez définir pour quel environnement vous voulez vider 33 | le cache dans votre fichier ``phpunit.xml.dist`` : 34 | 35 | .. code-block:: xml 36 | 37 | 38 | 39 | 40 | 41 | 42 | Cela devient maintenant une variable d'environnement (c-a-d ``$_ENV``) 43 | qui est disponible dans votre fichier bootstrap personnalisé 44 | (``tests.bootstrap.php``). -------------------------------------------------------------------------------- /cookbook/testing/doctrine.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Tests; Doctrine 3 | 4 | Comment tester les dépôts Doctrine 5 | ================================== 6 | 7 | Les tests unitaires des dépôts Doctrines à l’intérieur d'un projet Symfony 8 | ne sont pas recommandés. Lorsque vous travaillez avec un dépôt, vous 9 | travaillez avec quelque chose qui est réellement sensé être testé avec une 10 | véritable connexion à une base de données. 11 | 12 | Heureusement, vous pouvez facilement tester vos requêtes avec une vraie 13 | base de données, comme décrit ci-dessous 14 | 15 | .. _cookbook-doctrine-repo-functional-test: 16 | 17 | Tests fonctionnels 18 | ------------------ 19 | 20 | Si vous avez besoin de tester l’exécution d'une requête, vous devez démarrer le kernel 21 | afin d'obtenir une connexion valide. Dans ce cas, votre classe doit hériter de ``WebTestCase``, 22 | une classe qui simplifiera les processus de test:: 23 | 24 | // src/Acme/StoreBundle/Tests/Entity/ProductRepositoryFunctionalTest.php 25 | namespace Acme\StoreBundle\Tests\Entity; 26 | 27 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 28 | 29 | class ProductRepositoryFunctionalTest extends WebTestCase 30 | { 31 | /** 32 | * @var \Doctrine\ORM\EntityManager 33 | */ 34 | private $em; 35 | 36 | public function setUp() 37 | { 38 | static::$kernel = static::createKernel(); 39 | static::$kernel->boot(); 40 | $this->em = static::$kernel->getContainer()->get('doctrine.orm.entity_manager'); 41 | } 42 | 43 | public function testSearchByCategoryName() 44 | { 45 | $products = $this->em 46 | ->getRepository('AcmeStoreBundle:Product') 47 | ->searchByCategoryName('foo') 48 | ; 49 | 50 | $this->assertCount(1, $products); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /cookbook/testing/http_authentication.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Tests; HTTP authentication 3 | 4 | Comment simuler une authentification HTTP dans un Test Fonctionnel 5 | ================================================================== 6 | 7 | Si votre application requiert une authentification HTTP, vous pouvez transmettre 8 | le nom d'utilisateur et le mot de passe comme variable serveurs à la méthode 9 | ``createClient()``:: 10 | 11 | $client = static::createClient(array(), array( 12 | 'PHP_AUTH_USER' => 'username', 13 | 'PHP_AUTH_PW' => 'pa$$word', 14 | )); 15 | 16 | Vous pouvez aussi les surcharger directement dans l'objet requête:: 17 | 18 | $client->request('DELETE', '/post/12', array(), array(), array( 19 | 'PHP_AUTH_USER' => 'username', 20 | 'PHP_AUTH_PW' => 'pa$$word', 21 | )); 22 | 23 | Quand votre application utilise un ``form_login``, vous pouvez effectuer vos tests 24 | plus simplement en permettant à la configuration de test d'utiliser 25 | l'authentification HTTP. De cette manière, vous pouvez utiliser le code décrit 26 | ci-dessus pour vous authentifier dans les tests, mais néanmoins conserver le fait 27 | que vos utilisateurs doivent se connecter via l'usuel ``form_login``. 28 | Pour cela, dans la configuration de test vous devez inclure la clé 29 | ``http_basic`` dans votre pare-feu Symfony, à l'intérieur du conteneur traitant 30 | le ``form_login`` : 31 | 32 | .. configuration-block:: 33 | 34 | .. code-block:: yaml 35 | 36 | # app/config/config_test.yml 37 | security: 38 | firewalls: 39 | your_firewall_name: 40 | http_basic: 41 | -------------------------------------------------------------------------------- /cookbook/testing/index.rst: -------------------------------------------------------------------------------- 1 | Tests 2 | ===== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | http_authentication 8 | simulating_authentication 9 | insulating_clients 10 | profiling 11 | database 12 | doctrine 13 | bootstrap 14 | -------------------------------------------------------------------------------- /cookbook/testing/insulating_clients.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Tests; Insulating clients 3 | 4 | Comment tester les interactions de multiples clients 5 | ==================================================== 6 | 7 | Si vous avez besoin de simuler des interactions entre différents clients (pour 8 | un « chat » par exemple), créez plusieurs clients:: 9 | 10 | $harry = static::createClient(); 11 | $sally = static::createClient(); 12 | 13 | $harry->request('POST', '/say/sally/Hello'); 14 | $sally->request('GET', '/messages'); 15 | 16 | $this->assertEquals(201, $harry->getResponse()->getStatus()); 17 | $this->assertRegExp('/Hello/', $sally->getResponse()->getContent()); 18 | 19 | Cependant cela ne fonctionnera que si vous ne maintenez pas dans votre application 20 | un état global et si aucune des bibliothèques tierces n'utilise de techniques requérant 21 | des états globaux. Dans ces cas vous devrez isoler les clients:: 22 | 23 | $harry = static::createClient(); 24 | $sally = static::createClient(); 25 | 26 | $harry->insulate(); 27 | $sally->insulate(); 28 | 29 | $harry->request('POST', '/say/sally/Hello'); 30 | $sally->request('GET', '/messages'); 31 | 32 | $this->assertEquals(201, $harry->getResponse()->getStatus()); 33 | $this->assertRegExp('/Hello/', $sally->getResponse()->getContent()); 34 | 35 | Les clients isolés exécute de manière transparente leur requête dans un processus 36 | PHP dédié et « sain », et évitent donc quelconque effet de bord. 37 | 38 | .. tip:: 39 | 40 | Comme un client isolé est plus lent, vous pouvez garder un client dans le 41 | processus principal et n'isoler que les autres. 42 | -------------------------------------------------------------------------------- /cookbook/testing/profiling.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Tests; Profiling 3 | 4 | Comment utiliser le Profiler dans un test fonctionnel 5 | ===================================================== 6 | 7 | Il est grandement recommandé qu'un test fonctionnel ne teste que l'objet Response. 8 | Cependant si vous écrivez des tests qui surveillent vos serveurs de productions, vous 9 | désirerez peut-être écrire des tests sur les données provenant du profiler. En effet 10 | ce dernier fournit des méthodes efficaces, permettant de contrôler de nombreux 11 | comportements et d'appliquer certaines métriques. 12 | 13 | Le :ref:`Profiler ` de Symfony2 collecte de nombreuses 14 | informations à chaque requête. Utilisez celle-ci pour vérifier le nombre d'appels 15 | à la base de données, le temps passé dans l'exécution du framework, ... 16 | 17 | Avant de pouvoir écrire des assertions, vous devez activer le profiler et vous assurez 18 | qu'il est disponible (il est activé par défaut dans l'environnement de ``test`` ):: 19 | 20 | class HelloControllerTest extends WebTestCase 21 | { 22 | public function testIndex() 23 | { 24 | $client = static::createClient(); 25 | 26 | // Active le profiler pour la prochaine requête 27 | // (cela ne fait rien si le profiler n'est pas disponible) 28 | $client->enableProfiler(); 29 | 30 | $crawler = $client->request('GET', '/hello/Fabien'); 31 | 32 | // Ecrire des assertions concernant la réponse 33 | 34 | // Vérifier que le profiler est activé 35 | if ($profile = $client->getProfile()) { 36 | // Vérifier le nombre de requêtes 37 | $this->assertLessThan(10, $profile->getCollector('db')->getQueryCount()); 38 | 39 | // Vérifier le temps utilisé par le framework 40 | $this->assertLessThan(500, $profile->getCollector('time')->getDuration()); 41 | } 42 | } 43 | } 44 | 45 | Si un test échoue à cause des données du profilage (trop d'appels à la base de données 46 | par exemple), vous pouvez utiliser le Profiler Web afin d’analyser la requête après que 47 | les tests soient terminés. Cela est réalisable simplement en intégrant le token suivant 48 | dans les messages d'erreurs:: 49 | 50 | $this->assertLessThan( 51 | 30, 52 | $profile->get('db')->getQueryCount(), 53 | sprintf('Checks that query count is less than 30 (token %s)', $profile->getToken()) 54 | ); 55 | 56 | .. caution:: 57 | 58 | Le profiler conserve des données différentes suivant l'environnement utilisé 59 | (particulièrement si vous utilisez SQLite, ce qui est la configuration par 60 | défaut). 61 | 62 | .. note:: 63 | 64 | Les informations du profiler sont disponibles même si vous isolez un client 65 | ou utilisez une couche HTTP particulière pour vos tests. 66 | 67 | .. tip:: 68 | 69 | L'API intégrée vous permet de connaître les méthodes et les interfaces disponibles : 70 | :doc:`data collectors`. 71 | -------------------------------------------------------------------------------- /cookbook/testing/simulating_authentication.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Tests; Simuler une authentification 3 | 4 | Comment simuler une authentification avec un token dans un test fonctionnel 5 | =========================================================================== 6 | 7 | Les requêtes d'authentification dans les tests fonctionnels peuvent 8 | ralentir la suite de tests. Cela peut devenir un problème particulièrement 9 | lorsque le ``form_login`` est utilisé, puisque cela requiert des requêtes 10 | additionnelles pour remplir et soumettre le formulaire. 11 | 12 | L'une des solutions est de configurer votre firewall à utiliser ``http_basic`` 13 | en environnement de test comme expliqué dans :doc:`/cookbook/testing/http_authentication`. 14 | Une autre façon de faire serait de créer un token vous-même et de le stocker 15 | dans une session. En faisant cela, vous devez vous assurer que le cookie approprié 16 | est envoyé avec la requête. L'exemple suivant vous montre comment faire :: 17 | 18 | // src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php 19 | namespace Acme\DemoBundle\Tests\Controller; 20 | 21 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 22 | use Symfony\Component\BrowserKit\Cookie; 23 | use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; 24 | 25 | class DemoControllerTest extends WebTestCase 26 | { 27 | private $client = null; 28 | 29 | public function setUp() 30 | { 31 | $this->client = static::createClient(); 32 | } 33 | 34 | public function testSecuredHello() 35 | { 36 | $this->logIn(); 37 | 38 | $crawler = $this->client->request('GET', '/demo/secured/hello/Fabien'); 39 | 40 | $this->assertTrue($this->client->getResponse()->isSuccessful()); 41 | $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); 42 | } 43 | 44 | private function logIn() 45 | { 46 | $session = $this->client->getContainer()->get('session'); 47 | 48 | $firewall = 'secured_area'; 49 | $token = new UsernamePasswordToken('admin', null, $firewall, array('ROLE_ADMIN')); 50 | $session->set('_security_'.$firewall, serialize($token)); 51 | $session->save(); 52 | 53 | $cookie = new Cookie($session->getName(), $session->getId()); 54 | $this->client->getCookieJar()->set($cookie); 55 | } 56 | } 57 | 58 | .. note:: 59 | 60 | La technique décrite dans :doc:`/cookbook/testing/http_authentication` 61 | est plus propre et de ce fait préférée. 62 | -------------------------------------------------------------------------------- /cookbook/validation/index.rst: -------------------------------------------------------------------------------- 1 | Validation 2 | ========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | custom_constraint 8 | -------------------------------------------------------------------------------- /cookbook/web_services/index.rst: -------------------------------------------------------------------------------- 1 | Services Web 2 | ============ 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | php_soap_extension 8 | -------------------------------------------------------------------------------- /cookbook/workflow/index.rst: -------------------------------------------------------------------------------- 1 | Workflow 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | new_project_git 8 | new_project_svn 9 | -------------------------------------------------------------------------------- /images/book/doctrine_image_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/doctrine_image_1.png -------------------------------------------------------------------------------- /images/book/doctrine_image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/doctrine_image_2.png -------------------------------------------------------------------------------- /images/book/doctrine_image_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/doctrine_image_3.png -------------------------------------------------------------------------------- /images/book/doctrine_web_debug_toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/doctrine_web_debug_toolbar.png -------------------------------------------------------------------------------- /images/book/form-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/form-simple.png -------------------------------------------------------------------------------- /images/book/form-simple2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/form-simple2.png -------------------------------------------------------------------------------- /images/book/security_admin_role_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_admin_role_access.png -------------------------------------------------------------------------------- /images/book/security_anonymous_user_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_anonymous_user_access.png -------------------------------------------------------------------------------- /images/book/security_anonymous_user_denied_authorization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_anonymous_user_denied_authorization.png -------------------------------------------------------------------------------- /images/book/security_authentication_authorization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_authentication_authorization.png -------------------------------------------------------------------------------- /images/book/security_full_step_authorization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_full_step_authorization.png -------------------------------------------------------------------------------- /images/book/security_ryan_no_role_admin_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/book/security_ryan_no_role_admin_access.png -------------------------------------------------------------------------------- /images/components/console/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/console/progress.png -------------------------------------------------------------------------------- /images/components/console/table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/console/table.png -------------------------------------------------------------------------------- /images/components/http_kernel/01-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/01-workflow.png -------------------------------------------------------------------------------- /images/components/http_kernel/02-kernel-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/02-kernel-request.png -------------------------------------------------------------------------------- /images/components/http_kernel/03-kernel-request-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/03-kernel-request-response.png -------------------------------------------------------------------------------- /images/components/http_kernel/04-resolve-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/04-resolve-controller.png -------------------------------------------------------------------------------- /images/components/http_kernel/06-kernel-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/06-kernel-controller.png -------------------------------------------------------------------------------- /images/components/http_kernel/07-controller-arguments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/07-controller-arguments.png -------------------------------------------------------------------------------- /images/components/http_kernel/08-call-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/08-call-controller.png -------------------------------------------------------------------------------- /images/components/http_kernel/09-controller-returns-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/09-controller-returns-response.png -------------------------------------------------------------------------------- /images/components/http_kernel/10-kernel-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/10-kernel-view.png -------------------------------------------------------------------------------- /images/components/http_kernel/11-kernel-exception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/11-kernel-exception.png -------------------------------------------------------------------------------- /images/components/http_kernel/request-response-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/request-response-flow.png -------------------------------------------------------------------------------- /images/components/http_kernel/sub-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/http_kernel/sub-request.png -------------------------------------------------------------------------------- /images/components/serializer/serializer_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/components/serializer/serializer_workflow.png -------------------------------------------------------------------------------- /images/docs-pull-request-change-base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/docs-pull-request-change-base.png -------------------------------------------------------------------------------- /images/docs-pull-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/docs-pull-request.png -------------------------------------------------------------------------------- /images/http-xkcd-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/http-xkcd-request.png -------------------------------------------------------------------------------- /images/http-xkcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/http-xkcd.png -------------------------------------------------------------------------------- /images/quick_tour/hello_fabien.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/quick_tour/hello_fabien.png -------------------------------------------------------------------------------- /images/quick_tour/profiler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/quick_tour/profiler.png -------------------------------------------------------------------------------- /images/quick_tour/web_debug_toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/quick_tour/web_debug_toolbar.png -------------------------------------------------------------------------------- /images/quick_tour/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/quick_tour/welcome.png -------------------------------------------------------------------------------- /images/release-process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/release-process.jpg -------------------------------------------------------------------------------- /images/request-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symfony-fr/symfony-docs-fr/263aeabc81bc920325e2758f5d65ba2eac95cb53/images/request-flow.png -------------------------------------------------------------------------------- /index.rst: -------------------------------------------------------------------------------- 1 | Documentation Symfony2 2 | ====================== 3 | 4 | Quick Tour 5 | ---------- 6 | 7 | Démarrez rapidement avec le :doc:`Quick Tour ` de Symfony 2 : 8 | 9 | .. toctree:: 10 | :hidden: 11 | 12 | quick_tour/index 13 | 14 | * :doc:`quick_tour/the_big_picture` > 15 | * :doc:`quick_tour/the_view` > 16 | * :doc:`quick_tour/the_controller` > 17 | * :doc:`quick_tour/the_architecture` 18 | 19 | Book 20 | ---- 21 | 22 | Plongez-vous dans Symfony2 avec les guides thématiques : 23 | 24 | .. toctree:: 25 | :hidden: 26 | 27 | book/index 28 | 29 | .. include:: /book/map.rst.inc 30 | 31 | Cookbook 32 | -------- 33 | 34 | .. toctree:: 35 | :hidden: 36 | 37 | cookbook/index 38 | 39 | Lisez le :doc:`Cookbook`. 40 | 41 | Composants 42 | ---------- 43 | 44 | .. toctree:: 45 | :hidden: 46 | 47 | components/index 48 | 49 | Lisez la documentation sur les :doc:`Composants`. 50 | 51 | Documents de Référence 52 | ---------------------- 53 | 54 | Trouvez rapidement des réponses à vos questions avec les documents de référence : 55 | 56 | .. toctree:: 57 | :hidden: 58 | 59 | reference/index 60 | 61 | .. include:: /reference/map.rst.inc 62 | 63 | Bundles 64 | ------- 65 | 66 | L'Edition Standard de Symfony est livrée avec quelques bundles. 67 | Apprenez-en plus à propos d'eux : 68 | 69 | .. toctree:: 70 | :hidden: 71 | 72 | bundles/index 73 | 74 | .. include:: /bundles/map.rst.inc 75 | 76 | CMF 77 | --- 78 | 79 | Le Symfony CMFProject facilite l'ajout de fonctionnalités liées aux CMS dans 80 | les applications construites avec le framework PHP Symfony2. 81 | 82 | .. toctree:: 83 | :hidden: 84 | 85 | cmf/index 86 | 87 | Contribuer 88 | ---------- 89 | 90 | Contribuer à Symfony2 : 91 | 92 | .. toctree:: 93 | :hidden: 94 | 95 | contributing/index 96 | 97 | .. include:: /contributing/map.rst.inc 98 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function sparse_checkout { 4 | mkdir sparse_checkout 5 | cd sparse_checkout 6 | git init 7 | git config core.sparsecheckout true 8 | git remote add -f origin http://github.com/$1/$2 9 | echo Resources/doc > .git/info/sparse-checkout 10 | git checkout master 11 | cd .. 12 | rm -rf sparse_checkout 13 | } 14 | -------------------------------------------------------------------------------- /quick_tour/index.rst: -------------------------------------------------------------------------------- 1 | Le Quick Tour 2 | ============= 3 | 4 | .. toctree:: 5 | :maxdepth: 1 6 | 7 | the_big_picture 8 | the_view 9 | the_controller 10 | the_architecture 11 | -------------------------------------------------------------------------------- /redirection_map: -------------------------------------------------------------------------------- 1 | /cookbook/doctrine/migrations /bundles/DoctrineFixturesBundle/index 2 | /cookbook/doctrine/doctrine_fixtures /bundles/DoctrineFixturesBundle/index 3 | /cookbook/doctrine/mongodb /bundles/DoctrineMongoDBBundle/index 4 | /cookbook/form/simple_signup_form_with_mongodb /bundles/DoctrineMongoDBBundle/form 5 | /cookbook/email /cookbook/email/email 6 | /cookbook/gmail /cookbook/email/gmail 7 | /cookbook/console /components/console 8 | /cookbook/tools/autoloader /components/class_loader 9 | /cookbook/tools/finder /components/finder 10 | /cookbook/service_container/parentservices /components/dependency_injection/parentservices 11 | /cookbook/service_container/factories /components/dependency_injection/factories 12 | /cookbook/service_container/tags /components/dependency_injection/tags 13 | /reference/configuration/mongodb /bundles/DoctrineMongoDBBundle/config 14 | /reference/YAML /components/yaml 15 | /components/dependency_injection /components/dependency_injection/introduction 16 | /components/event_dispatcher /components/event_dispatcher/introduction 17 | /components/http_foundation /components/http_foundation/introduction -------------------------------------------------------------------------------- /reference/configuration/web_profiler.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Configuration reference; WebProfiler 3 | 4 | Configuration du WebProfilerBundle 5 | ================================== 6 | 7 | Configuration complète par défaut 8 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 9 | 10 | .. configuration-block:: 11 | 12 | .. code-block:: yaml 13 | 14 | web_profiler: 15 | 16 | # DÉPRÉCIÉ, n'est plus utile et peut être retiré de votre configuration sans danger 17 | verbose: true 18 | 19 | # affiche la barre de débuggage en bas des pages avec un résumé des informations du profiler 20 | toolbar: false 21 | position: bottom 22 | 23 | # permet de pouvoir consulter les données collectées lors d'une redirection. 24 | intercept_redirects: false 25 | 26 | .. code-block:: xml 27 | 28 | 33 | -------------------------------------------------------------------------------- /reference/constraints.rst: -------------------------------------------------------------------------------- 1 | Contraintes de validation de référence 2 | ====================================== 3 | 4 | .. toctree:: 5 | :maxdepth: 1 6 | :hidden: 7 | 8 | constraints/NotBlank 9 | constraints/Blank 10 | constraints/NotNull 11 | constraints/Null 12 | constraints/True 13 | constraints/False 14 | constraints/Type 15 | 16 | constraints/Email 17 | constraints/Length 18 | constraints/Url 19 | constraints/Regex 20 | constraints/Ip 21 | 22 | constraints/Range 23 | 24 | constraints/EqualTo 25 | constraints/NotEqualTo 26 | constraints/IdenticalTo 27 | constraints/NotIdenticalTo 28 | constraints/LessThan 29 | constraints/LessThanOrEqual 30 | constraints/GreaterThan 31 | constraints/GreaterThanOrEqual 32 | 33 | constraints/Date 34 | constraints/DateTime 35 | constraints/Time 36 | 37 | constraints/Choice 38 | constraints/Collection 39 | constraints/Count 40 | constraints/UniqueEntity 41 | constraints/Language 42 | constraints/Locale 43 | constraints/Country 44 | 45 | constraints/File 46 | constraints/Image 47 | 48 | constraints/CardScheme 49 | constraints/Currency 50 | constraints/Luhn 51 | constraints/Iban 52 | constraints/Isbn 53 | constraints/Issn 54 | 55 | constraints/Callback 56 | constraints/All 57 | constraints/UserPassword 58 | constraints/Valid 59 | 60 | Le validateur est conçu pour valider les objets selon des *contraintes*. 61 | Dans la vie réelle, une contrainte pourrait être : « Le gâteau ne doit 62 | pas être brûlé ». Dans Symfony2, les contraintes sont similaires : ce sont 63 | des assertions qu'une condition est vérifiée. 64 | 65 | Contraintes supportées 66 | ---------------------- 67 | 68 | Les contraintes suivantes sont nativement supportées par Symfony2 : 69 | 70 | .. include:: /reference/constraints/map.rst.inc -------------------------------------------------------------------------------- /reference/constraints/Blank.rst: -------------------------------------------------------------------------------- 1 | Blank 2 | ===== 3 | 4 | Valide qu'une valeur est vide, égale à une chaîne vide, ou égale à ``null``. 5 | Pour forcer cette valeur à être strictement égale à ``null``, jetez un oeil à 6 | la contrainte :doc:`/reference/constraints/Null`. Pour forcer cette valeur à 7 | ne *pas* être vide, lisez :doc:`/reference/constraints/NotBlank`. 8 | 9 | +----------------+-----------------------------------------------------------------------+ 10 | | S'applique à | :ref:`propriété ou méthode` | 11 | +----------------+-----------------------------------------------------------------------+ 12 | | Options | - `message`_ | 13 | +----------------+-----------------------------------------------------------------------+ 14 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\Blank` | 15 | +----------------+-----------------------------------------------------------------------+ 16 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\BlankValidator` | 17 | +----------------+-----------------------------------------------------------------------+ 18 | 19 | Utilisation de base 20 | ------------------- 21 | 22 | Si, pour certaines raisons, vous voulez vous assurer que la la propriété ``firstName`` 23 | de la classe ``Author`` soit nulle, vous pouvez procéder comme ceci : 24 | 25 | .. configuration-block:: 26 | 27 | .. code-block:: yaml 28 | 29 | properties: 30 | firstName: 31 | - Blank: ~ 32 | 33 | .. code-block:: php-annotations 34 | 35 | // src/Acme/BlogBundle/Entity/Author.php 36 | use Symfony\Component\Validator\Constraints as Assert; 37 | 38 | class Author 39 | { 40 | /** 41 | * @Assert\Blank() 42 | */ 43 | protected $firstName; 44 | } 45 | 46 | .. code-block:: xml 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | .. code-block:: php 56 | 57 | // src/Acme/BlogBundle/Entity/Author.php 58 | namespace Acme\BlogBundle\Entity; 59 | 60 | use Symfony\Component\Validator\Mapping\ClassMetadata; 61 | use Symfony\Component\Validator\Constraints as Assert; 62 | 63 | class Author 64 | { 65 | public static function loadValidatorMetadata(ClassMetadata $metadata) 66 | { 67 | $metadata->addPropertyConstraint('firstName', new Assert\Blank()); 68 | } 69 | } 70 | 71 | Options 72 | ------- 73 | 74 | message 75 | ~~~~~~~ 76 | 77 | **type**: ``string`` **default**: ``This value should be blank`` 78 | 79 | Ce message s'affiche si la valeur n'est pas vide. -------------------------------------------------------------------------------- /reference/constraints/Country.rst: -------------------------------------------------------------------------------- 1 | Country 2 | ======= 3 | 4 | Valide qu'une valeur est un code de pays en deux-lettres. 5 | 6 | +----------------+------------------------------------------------------------------------+ 7 | | S'applique à | :ref:`propriété ou méthode` | 8 | +----------------+------------------------------------------------------------------------+ 9 | | Options | - `message`_ | 10 | +----------------+------------------------------------------------------------------------+ 11 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\Country` | 12 | +-----------------------------------------------------------------------------------------+ 13 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\CountryValidator` | 14 | +----------------+------------------------------------------------------------------------+ 15 | 16 | Utilisation de base 17 | ------------------- 18 | 19 | .. configuration-block:: 20 | 21 | .. code-block:: yaml 22 | 23 | # src/UserBundle/Resources/config/validation.yml 24 | Acme\UserBundle\Entity\User: 25 | properties: 26 | country: 27 | - Country: 28 | 29 | .. code-block:: php-annotations 30 | 31 | // src/Acme/UserBundle/Entity/User.php 32 | namespace Acme\UserBundle\Entity; 33 | 34 | use Symfony\Component\Validator\Constraints as Assert; 35 | 36 | class User 37 | { 38 | /** 39 | * @Assert\Country 40 | */ 41 | protected $country; 42 | } 43 | 44 | .. code-block:: xml 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | .. code-block:: php 54 | 55 | // src/Acme/UserBundle/Entity/User.php 56 | namespace Acme\UserBundle\Entity; 57 | 58 | use Symfony\Component\Validator\Mapping\ClassMetadata; 59 | use Symfony\Component\Validator\Constraints as Assert; 60 | 61 | class User 62 | { 63 | public static function loadValidationMetadata(ClassMetadata $metadata) 64 | { 65 | $metadata->addPropertyConstraint('country', new Assert\Country()); 66 | } 67 | } 68 | 69 | Options 70 | ------- 71 | 72 | message 73 | ~~~~~~~ 74 | 75 | **type**: ``string`` **default**: ``This value is not a valid country`` 76 | 77 | Ce message s'affiche si la chaîne de caractères n'est pas un code pays valide. -------------------------------------------------------------------------------- /reference/constraints/Date.rst: -------------------------------------------------------------------------------- 1 | Date 2 | ==== 3 | 4 | Valide qu'une valeur est une date valide, c'est-à-dire soit un objet ``DateTime``, 5 | soit une chaîne de caractères (ou un objet qui peut être converti en chaîne de caractères) 6 | qui respecte un format valide YYYY-MM-DD. 7 | 8 | 9 | +----------------+--------------------------------------------------------------------+ 10 | | S'applique à | :ref:`propriété ou méthode` | 11 | +----------------+--------------------------------------------------------------------+ 12 | | Options | - `message`_ | 13 | +----------------+--------------------------------------------------------------------+ 14 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\Date` | 15 | +----------------+--------------------------------------------------------------------+ 16 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\DateValidator` | 17 | +----------------+--------------------------------------------------------------------+ 18 | 19 | Utilisation de base 20 | ------------------- 21 | 22 | .. configuration-block:: 23 | 24 | .. code-block:: yaml 25 | 26 | # src/Acme/BlogBundle/Resources/config/validation.yml 27 | Acme\BlogBundle\Entity\Author: 28 | properties: 29 | birthday: 30 | - Date: ~ 31 | 32 | .. code-block:: php-annotations 33 | 34 | // src/Acme/BlogBundle/Entity/Author.php 35 | namespace Acme\BlogBundle\Entity; 36 | 37 | use Symfony\Component\Validator\Constraints as Assert; 38 | 39 | class Author 40 | { 41 | /** 42 | * @Assert\Date() 43 | */ 44 | protected $birthday; 45 | } 46 | 47 | .. code-block:: xml 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | .. code-block:: php 57 | 58 | // src/Acme/BlogBundle/Entity/Author.php 59 | namespace Acme\BlogBundle\Entity; 60 | 61 | use Symfony\Component\Validator\Mapping\ClassMetadata; 62 | use Symfony\Component\Validator\Constraints as Assert; 63 | 64 | class Author 65 | { 66 | public static function loadValidatorMetadata(ClassMetadata $metadata) 67 | { 68 | $metadata->addPropertyConstraint('birthday', new Assert\Date()); 69 | } 70 | } 71 | 72 | Options 73 | ------- 74 | 75 | message 76 | ~~~~~~~ 77 | 78 | **type**: ``string`` **default**: ``This value is not a valid date`` 79 | 80 | Ce message s'affiche si la donnée finale n'est pas une date valide. -------------------------------------------------------------------------------- /reference/constraints/DateTime.rst: -------------------------------------------------------------------------------- 1 | DateTime 2 | ======== 3 | 4 | Valide que la valeur est un « datetime » valide, c'est-à-dire soit un objet 5 | ``DateTime``, soit une chaîne de caractères (ou un objet qui peut être converti 6 | en chaîne de caractères) qui respecte un format YYYY-MM-DD HH:MM:SS valide. 7 | 8 | +----------------+------------------------------------------------------------------------+ 9 | | S'applique à | :ref:`propriété ou méthode` | 10 | +----------------+------------------------------------------------------------------------+ 11 | | Options | - `message`_ | 12 | +----------------+------------------------------------------------------------------------+ 13 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\DateTime` | 14 | +----------------+------------------------------------------------------------------------+ 15 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\DateTimeValidator` | 16 | +----------------+------------------------------------------------------------------------+ 17 | 18 | Utilisation de base 19 | ------------------- 20 | 21 | .. configuration-block:: 22 | 23 | .. code-block:: yaml 24 | 25 | # src/Acme/BlogBundle/Resources/config/validation.yml 26 | Acme\BlogBundle\Entity\Author: 27 | properties: 28 | createdAt: 29 | - DateTime: ~ 30 | 31 | .. code-block:: php-annotations 32 | 33 | // src/Acme/BlogBundle/Entity/Author.php 34 | namespace Acme\BlogBundle\Entity; 35 | 36 | use Symfony\Component\Validator\Constraints as Assert; 37 | 38 | class Author 39 | { 40 | /** 41 | * @Assert\DateTime() 42 | */ 43 | protected $createdAt; 44 | } 45 | 46 | .. code-block:: xml 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | .. code-block:: php 56 | 57 | // src/Acme/BlogBundle/Entity/Author.php 58 | namespace Acme\BlogBundle\Entity; 59 | 60 | use Symfony\Component\Validator\Mapping\ClassMetadata; 61 | use Symfony\Component\Validator\Constraints as Assert; 62 | 63 | class Author 64 | { 65 | public static function loadValidatorMetadata(ClassMetadata $metadata) 66 | { 67 | $metadata->addPropertyConstraint('createdAt', new Assert\DateTime()); 68 | } 69 | } 70 | 71 | Options 72 | ------- 73 | 74 | message 75 | ~~~~~~~ 76 | 77 | **type**: ``string`` **default**: ``This value is not a valid datetime`` 78 | 79 | Le message est affiché si la données finale n'est pas un datetime. -------------------------------------------------------------------------------- /reference/constraints/Language.rst: -------------------------------------------------------------------------------- 1 | Language 2 | ======== 3 | 4 | Valide que la valeur est un code de langue valide. 5 | 6 | +----------------+------------------------------------------------------------------------+ 7 | | S'applique à | :ref:`propriété ou méthode` | 8 | +----------------+------------------------------------------------------------------------+ 9 | | Options | - `message`_ | 10 | +----------------+------------------------------------------------------------------------+ 11 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\Language` | 12 | +----------------+------------------------------------------------------------------------+ 13 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\LanguageValidator` | 14 | +----------------+------------------------------------------------------------------------+ 15 | 16 | Utilisation de base 17 | ------------------- 18 | 19 | .. configuration-block:: 20 | 21 | .. code-block:: yaml 22 | 23 | # src/UserBundle/Resources/config/validation.yml 24 | Acme\UserBundle\Entity\User: 25 | properties: 26 | preferredLanguage: 27 | - Language: 28 | 29 | .. code-block:: php-annotations 30 | 31 | // src/Acme/UserBundle/Entity/User.php 32 | namespace Acme\UserBundle\Entity; 33 | 34 | use Symfony\Component\Validator\Constraints as Assert; 35 | 36 | class User 37 | { 38 | /** 39 | * @Assert\Language 40 | */ 41 | protected $preferredLanguage; 42 | } 43 | 44 | .. code-block:: xml 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | .. code-block:: php 54 | 55 | // src/Acme/UserBundle/Entity/User.php 56 | namespace Acme\UserBundle\Entity; 57 | 58 | use Symfony\Component\Validator\Mapping\ClassMetadata; 59 | use Symfony\Component\Validator\Constraints as Assert; 60 | 61 | class User 62 | { 63 | public static function loadValidatorMetadata(ClassMetadata $metadata) 64 | { 65 | $metadata->addPropertyConstraint('preferredLanguage', new Assert\Language()); 66 | } 67 | } 68 | 69 | Options 70 | ------- 71 | 72 | message 73 | ~~~~~~~ 74 | 75 | **type**: ``string`` **default**: ``This value is not a valid language`` 76 | 77 | Le message s'affiche si la chaîne de caractères n'est pas un code de langue valide. -------------------------------------------------------------------------------- /reference/constraints/Locale.rst: -------------------------------------------------------------------------------- 1 | Locale 2 | ====== 3 | 4 | Valide que la valeur est une locale valide. 5 | 6 | La « valeur » de chaque locale est soit le code *langue* ISO639-1 en deux lettres 7 | (ex ``fr``), soit le code langue suivi d'un tiret du bas (``_``) puis du code *pays* 8 | ISO3166 (ex ``fr_FR`` pour Français/France). 9 | 10 | +----------------+------------------------------------------------------------------------+ 11 | | S'applique à | :ref:`propriété ou méthode` | 12 | +----------------+------------------------------------------------------------------------+ 13 | | Options | - `message`_ | 14 | +----------------+------------------------------------------------------------------------+ 15 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\Locale` | 16 | +----------------+------------------------------------------------------------------------+ 17 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\LocaleValidator` | 18 | +----------------+------------------------------------------------------------------------+ 19 | 20 | Utilisation de base 21 | ------------------- 22 | 23 | .. configuration-block:: 24 | 25 | .. code-block:: yaml 26 | 27 | # src/UserBundle/Resources/config/validation.yml 28 | Acme\UserBundle\Entity\User: 29 | properties: 30 | locale: 31 | - Locale: 32 | 33 | .. code-block:: php-annotations 34 | 35 | // src/Acme/UserBundle/Entity/User.php 36 | namespace Acme\UserBundle\Entity; 37 | 38 | use Symfony\Component\Validator\Constraints as Assert; 39 | 40 | class User 41 | { 42 | /** 43 | * @Assert\Locale 44 | */ 45 | protected $locale; 46 | } 47 | 48 | .. code-block:: xml 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | .. code-block:: php 58 | 59 | // src/Acme/UserBundle/Entity/User.php 60 | namespace Acme\UserBundle\Entity; 61 | 62 | use Symfony\Component\Validator\Mapping\ClassMetadata; 63 | use Symfony\Component\Validator\Constraints as Assert; 64 | 65 | class User 66 | { 67 | public static function loadValidatorMetadata(ClassMetadata $metadata) 68 | { 69 | $metadata->addPropertyConstraint('locale', new Assert\Locale()); 70 | } 71 | } 72 | 73 | Options 74 | ------- 75 | 76 | message 77 | ~~~~~~~ 78 | 79 | **type**: ``string`` **default**: ``This value is not a valid locale`` 80 | 81 | Ce message s'affiche si la valeur n'est pas une locale valide. -------------------------------------------------------------------------------- /reference/constraints/NotNull.rst: -------------------------------------------------------------------------------- 1 | NotNull 2 | ======= 3 | 4 | Valide qu'une valeur n'est strictement pas égale à ``null``. Pour vous assurer qu'une 5 | valeur ne soit simplement pas vide (pas une chaîne de caractères vide), lisez la 6 | documentation de la contrainte :doc:`/reference/constraints/NotBlank`. 7 | 8 | +----------------+-----------------------------------------------------------------------+ 9 | | S'applique à | :ref:`propriété ou méthode` | 10 | +----------------+-----------------------------------------------------------------------+ 11 | | Options | - `message`_ | 12 | +----------------+-----------------------------------------------------------------------+ 13 | | Classe | :class:`Symfony\\Component\\Validator\\Constraints\\NotNull` | 14 | +----------------+-----------------------------------------------------------------------+ 15 | | Validateur | :class:`Symfony\\Component\\Validator\\Constraints\\NotNullValidator` | 16 | +----------------+-----------------------------------------------------------------------+ 17 | 18 | Utilisation de base 19 | ------------------- 20 | 21 | Si vous voulez vous assurer que la propriété ``firstName`` d'une classe ``Author`` 22 | ne soit strictement pas égale à ``null``, ajoutez le code suivant : 23 | 24 | .. configuration-block:: 25 | 26 | .. code-block:: yaml 27 | 28 | properties: 29 | firstName: 30 | - NotNull: ~ 31 | 32 | .. code-block:: php-annotations 33 | 34 | // src/Acme/BlogBundle/Entity/Author.php 35 | use Symfony\Component\Validator\Constraints as Assert; 36 | 37 | class Author 38 | { 39 | /** 40 | * @Assert\NotNull() 41 | */ 42 | protected $firstName; 43 | } 44 | 45 | Options 46 | ------- 47 | 48 | message 49 | ~~~~~~~ 50 | 51 | **type**: ``string`` **default**: ``This value should not be null`` 52 | 53 | Le message qui sera affiché si la valeur est égale à ``null``. -------------------------------------------------------------------------------- /reference/constraints/_comparison-value-option.rst.inc: -------------------------------------------------------------------------------- 1 | value 2 | ~~~~~ 3 | 4 | **type**: ``mixed`` 5 | 6 | Cette option est requise. Elle définit la valeur de comparaison. Cela peut 7 | être une chaine, un nombre ou un objet. 8 | -------------------------------------------------------------------------------- /reference/forms/types.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Forms; Types Reference 3 | 4 | Types de formulaire de référence 5 | ================================ 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | :hidden: 10 | 11 | types/birthday 12 | types/button 13 | types/checkbox 14 | types/choice 15 | types/collection 16 | types/country 17 | types/currency 18 | types/date 19 | types/datetime 20 | types/email 21 | types/entity 22 | types/file 23 | types/form 24 | types/hidden 25 | types/integer 26 | types/language 27 | types/locale 28 | types/money 29 | types/number 30 | types/password 31 | types/percent 32 | types/radio 33 | types/repeated 34 | types/reset 35 | types/search 36 | types/submit 37 | types/text 38 | types/textarea 39 | types/time 40 | types/timezone 41 | types/url 42 | 43 | Un formulaire est composé de *champs*, chacun d'eux étant construit à l'aide 44 | d'un *type* de champ (ex le type ``text``, le type ``choice``, etc). Symfony2 45 | est fourni d'office avec un large choix de types de champ qui peuvent être utilisés 46 | dans votre application. 47 | 48 | Types de champ supportés 49 | ------------------------ 50 | 51 | Les types de champ suivants sont nativement supportés dans Symfony2 : 52 | 53 | .. include:: /reference/forms/types/map.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/button.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Forms; Fields; button 3 | 4 | Type de champ button 5 | ==================== 6 | 7 | .. versionadded:: 2.3 8 | Le type button est une nouveauté de Symfony 2.3 9 | 10 | Un simple bouton non responsive. 11 | 12 | +----------------------+----------------------------------------------------------------------+ 13 | | Rendu comme | balise ``button`` | 14 | +----------------------+----------------------------------------------------------------------+ 15 | | Options | - `attr`_ | 16 | | | - `disabled`_ | 17 | | | - `label`_ | 18 | | | - `label_attr`_ | 19 | | | - `translation_domain`_ | 20 | +----------------------+----------------------------------------------------------------------+ 21 | | Type parent | aucun | 22 | +----------------------+----------------------------------------------------------------------+ 23 | | Classe | :class:`Symfony\\Component\\Form\\Extension\\Core\\Type\\ButtonType` | 24 | +----------------------+----------------------------------------------------------------------+ 25 | 26 | Options 27 | ------- 28 | 29 | .. include:: /reference/forms/types/options/button_attr.rst.inc 30 | 31 | .. include:: /reference/forms/types/options/button_disabled.rst.inc 32 | 33 | .. include:: /reference/forms/types/options/button_label.rst.inc 34 | 35 | .. include:: /reference/forms/types/options/label_attr.rst.inc 36 | 37 | .. include:: /reference/forms/types/options/button_translation_domain.rst.inc 38 | 39 | Options surchargées 40 | ------------------- 41 | 42 | .. include:: /reference/forms/types/options/button_auto_initialize.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/email.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Forms; Fields; email 3 | 4 | Type de champ Email 5 | =================== 6 | 7 | Le champ ``email`` est un champ texte qui est rendu en utilisant la balise HTML5 8 | ````. 9 | 10 | +-------------+---------------------------------------------------------------------+ 11 | | Rendu comme | Champ ``input`` ``email`` (balise texte) | 12 | +-------------+---------------------------------------------------------------------+ 13 | | Options | - `max_length`_ | 14 | | héritées | - `empty_data`_ | 15 | | | - `required`_ | 16 | | | - `label`_ | 17 | | | - `label_attr`_ | 18 | | | - `data`_ | 19 | | | - `trim`_ | 20 | | | - `read_only`_ | 21 | | | - `disabled`_ | 22 | | | - `error_bubbling`_ | 23 | | | - `error_mapping`_ | 24 | | | - `mapped`_ | 25 | +-------------+---------------------------------------------------------------------+ 26 | | Type parent | :doc:`field` | 27 | +-------------+---------------------------------------------------------------------+ 28 | | Classe | :class:`Symfony\\Component\\Form\\Extension\\Core\\Type\\EmailType` | 29 | +-------------+---------------------------------------------------------------------+ 30 | 31 | Options héritées 32 | ---------------- 33 | 34 | Ces options sont héritées du type :doc:`field` : 35 | 36 | .. include:: /reference/forms/types/options/max_length.rst.inc 37 | 38 | .. include:: /reference/forms/types/options/empty_data.rst.inc 39 | 40 | .. include:: /reference/forms/types/options/required.rst.inc 41 | 42 | .. include:: /reference/forms/types/options/label.rst.inc 43 | 44 | .. include:: /reference/forms/types/options/label_attr.rst.inc 45 | 46 | .. include:: /reference/forms/types/options/data.rst.inc 47 | 48 | .. include:: /reference/forms/types/options/trim.rst.inc 49 | 50 | .. include:: /reference/forms/types/options/read_only.rst.inc 51 | 52 | .. include:: /reference/forms/types/options/disabled.rst.inc 53 | 54 | .. include:: /reference/forms/types/options/error_bubbling.rst.inc 55 | 56 | .. include:: /reference/forms/types/options/error_mapping.rst.inc 57 | 58 | .. include:: /reference/forms/types/options/mapped.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/form.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Forms; Fields; form 3 | 4 | Type de champ Form 5 | ================== 6 | 7 | Voir :class:`Symfony\\Component\\Form\\Extension\\Core\\Type\\FormType`. 8 | 9 | Le type ``form`` prédéfinit un ensemble d'options qui sont disponibles 10 | pour tous les champs : 11 | 12 | .. include:: /reference/forms/types/options/compound.rst.inc 13 | 14 | .. include:: /reference/forms/types/options/data.rst.inc 15 | 16 | .. include:: /reference/forms/types/options/data_class.rst.inc 17 | 18 | .. include:: /reference/forms/types/options/empty_data.rst.inc 19 | 20 | .. _reference-form-option-required: 21 | 22 | .. include:: /reference/forms/types/options/required.rst.inc 23 | 24 | .. include:: /reference/forms/types/options/label.rst.inc 25 | 26 | .. include:: /reference/forms/types/options/label_attr.rst.inc 27 | 28 | .. include:: /reference/forms/types/options/constraints.rst.inc 29 | 30 | .. include:: /reference/forms/types/options/cascade_validation.rst.inc 31 | 32 | .. include:: /reference/forms/types/options/read_only.rst.inc 33 | 34 | .. include:: /reference/forms/types/options/disabled.rst.inc 35 | 36 | .. include:: /reference/forms/types/options/trim.rst.inc 37 | 38 | .. include:: /reference/forms/types/options/mapped.rst.inc 39 | 40 | .. include:: /reference/forms/types/options/property_path.rst.inc 41 | 42 | .. include:: /reference/forms/types/options/attr.rst.inc 43 | 44 | .. include:: /reference/forms/types/options/translation_domain.rst.inc 45 | 46 | .. include:: /reference/forms/types/options/block_name.rst.inc 47 | 48 | .. _reference-form-option-max_length: 49 | 50 | .. include:: /reference/forms/types/options/max_length.rst.inc 51 | 52 | .. include:: /reference/forms/types/options/by_reference.rst.inc 53 | 54 | .. include:: /reference/forms/types/options/error_bubbling.rst.inc 55 | 56 | .. include:: /reference/forms/types/options/inherit_data.rst.inc 57 | 58 | .. include:: /reference/forms/types/options/error_mapping.rst.inc 59 | 60 | .. include:: /reference/forms/types/options/invalid_message.rst.inc 61 | 62 | .. include:: /reference/forms/types/options/invalid_message_parameters.rst.inc 63 | 64 | .. include:: /reference/forms/types/options/extra_fields_message.rst.inc 65 | 66 | .. include:: /reference/forms/types/options/post_max_size_message.rst.inc 67 | 68 | .. _reference-form-option-pattern: 69 | 70 | .. include:: /reference/forms/types/options/pattern.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/hidden.rst: -------------------------------------------------------------------------------- 1 | .. index:: 2 | single: Forms; Fields; hidden 3 | 4 | Type de champ Hidden 5 | ==================== 6 | 7 | Le type hidden représente un champ input hidden. 8 | 9 | +-------------+----------------------------------------------------------------------+ 10 | | Rendu comme | Champ ``input`` ``hidden`` | 11 | +-------------+----------------------------------------------------------------------+ 12 | | Options | - `required`_ | 13 | | surchargées | - `error_bubbling`_ | 14 | +-------------+----------------------------------------------------------------------+ 15 | | Options | - `data`_ | 16 | | héritées | - `property_path`_ | 17 | | | - `mapped`_ | 18 | | | - `error_mapping`_ | 19 | +-------------+----------------------------------------------------------------------+ 20 | | Type parent | :doc:`form` | 21 | +-------------+----------------------------------------------------------------------+ 22 | | Classe | :class:`Symfony\\Component\\Form\\Extension\\Core\\Type\\HiddenType` | 23 | +-------------+----------------------------------------------------------------------+ 24 | 25 | Options surchargées 26 | ------------------- 27 | 28 | required 29 | ~~~~~~~~ 30 | 31 | **default**: ``false`` 32 | 33 | Les champs cachés ne peuvent pas être obligatoires. 34 | 35 | error_bubbling 36 | ~~~~~~~~~~~~~~ 37 | 38 | **default**: ``true`` 39 | 40 | Transfères les erreurs à la racine du formulaire, sinon, elles ne seraient 41 | pas visibles. 42 | 43 | Options héritées 44 | ---------------- 45 | 46 | Ces options héritent du type :doc:`form` : 47 | 48 | .. include:: /reference/forms/types/options/data.rst.inc 49 | 50 | .. include:: /reference/forms/types/options/property_path.rst.inc 51 | 52 | .. include:: /reference/forms/types/options/mapped.rst.inc 53 | 54 | .. include:: /reference/forms/types/options/error_mapping.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/map.rst.inc: -------------------------------------------------------------------------------- 1 | Champs de type Texte 2 | ~~~~~~~~~~~~~~~~~~~~ 3 | 4 | * :doc:`text ` 5 | * :doc:`textarea ` 6 | * :doc:`email ` 7 | * :doc:`integer ` 8 | * :doc:`money ` 9 | * :doc:`number ` 10 | * :doc:`password ` 11 | * :doc:`percent ` 12 | * :doc:`search ` 13 | * :doc:`url ` 14 | 15 | Champs de type Choice 16 | ~~~~~~~~~~~~~~~~~~~~~ 17 | 18 | * :doc:`choice ` 19 | * :doc:`entity ` 20 | * :doc:`country ` 21 | * :doc:`language ` 22 | * :doc:`locale ` 23 | * :doc:`timezone ` 24 | * :doc:`currency ` 25 | 26 | Champs de type Date et Time 27 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28 | 29 | * :doc:`date ` 30 | * :doc:`datetime ` 31 | * :doc:`time ` 32 | * :doc:`birthday ` 33 | 34 | Autres champs 35 | ~~~~~~~~~~~~~ 36 | 37 | * :doc:`checkbox ` 38 | * :doc:`file ` 39 | * :doc:`radio ` 40 | 41 | Champs de type Groupe 42 | ~~~~~~~~~~~~~~~~~~~~~ 43 | 44 | * :doc:`collection ` 45 | * :doc:`repeated ` 46 | 47 | Champs cachés 48 | ~~~~~~~~~~~~~ 49 | 50 | * :doc:`hidden ` 51 | 52 | Boutons 53 | ~~~~~~~ 54 | 55 | * :doc:`button` 56 | * :doc:`reset` 57 | * :doc:`submit` 58 | 59 | Champs de base 60 | ~~~~~~~~~~~~~~ 61 | 62 | * :doc:`form ` -------------------------------------------------------------------------------- /reference/forms/types/options/_date_limitation.rst.inc: -------------------------------------------------------------------------------- 1 | .. caution:: 2 | 3 | Si ``timestamp`` est utilisé, ``DateType`` est limité aux dates entre 4 | le Ven, 13 Dec 1901 20:45:54 GMT et le jeudi, 19 Jan 2038 03:14:07 GMT sur les 5 | systemes 32bit. Ceci est du à la `limitation de PHP lui-même `_. -------------------------------------------------------------------------------- /reference/forms/types/options/_error_bubbling_body.rst.inc: -------------------------------------------------------------------------------- 1 | Si cette option est à ``true``, toute erreur de ce champ sera passée au champ parent ou au 2 | formulaire. Par exemple, si vous la définissez à ``true`` dans un champ classique, toute erreur 3 | sur ce champ sera rattachée au formulaire principal et non pas spécifiquement à ce champ. -------------------------------------------------------------------------------- /reference/forms/types/options/attr.rst.inc: -------------------------------------------------------------------------------- 1 | attr 2 | ~~~~ 3 | 4 | **type**: array **default**: Tableau vide 5 | 6 | Si vous voulez ajouter des attributs supplémentaires à un champ HTML, 7 | vous pouvez utiliser l'option ``attr``. Il s'agit d'un tableau associatif 8 | dont les clés sont des attributs HTML. Cela peut être utile si vous avez besoin de 9 | personnaliser une classe pour un widget:: 10 | 11 | $builder->add('body', 'textarea', array( 12 | 'attr' => array('class' => 'tinymce'), 13 | )); 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /reference/forms/types/options/block_name.rst.inc: -------------------------------------------------------------------------------- 1 | block_name 2 | ~~~~~~~~~~~ 3 | 4 | **type**: ``string`` **default**: le nom du formulaire (voir :ref:`Savoir quel block personnaliser `) 5 | 6 | Vous permet de surcharger le nom du block utilisé pour afficher le type 7 | de formulaire. Utile par exemple si vous avez plusieurs instances d'un 8 | même formulaire et que vous avez vesoin de personnaliser l'affichage 9 | de chaque formulaire individuellement. -------------------------------------------------------------------------------- /reference/forms/types/options/button_attr.rst.inc: -------------------------------------------------------------------------------- 1 | attr 2 | ~~~~ 3 | 4 | **type**: array **default**: Tableau vide 5 | 6 | Si vous voulez ajouter des attributs supplémentaires à une représentation HTML d'un bouton, 7 | Vous pouvez utiliser l'option ``attr``. Il s'agit d'un tableau associatif 8 | dont les clés sont des attributs HTML. Cela peut être utile si vous avez besoin de 9 | personnaliser une classe pour un bouton:: 10 | 11 | $builder->add('save', 'button', array( 12 | 'attr' => array('class' => 'save'), 13 | )); 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /reference/forms/types/options/button_auto_initialize.rst.inc: -------------------------------------------------------------------------------- 1 | auto_initialize 2 | ~~~~~~~~~~~~~~~ 3 | 4 | **type**: ``boolean`` **default**: ``false`` 5 | 6 | Une option interne : définit si le formulaire doit être initialisé 7 | automatiquement ou non. Pour tous les champs, cette option devrait toujours 8 | valoir ``true`` pour les formulaires de base. Et puisqu'un bouton ne peut pas 9 | être un formulaire complet à lui seul, l'option est définie à ``false``. 10 | Vous n'aurez pas besoin de changer cette option et vous n'aurez probablement 11 | jamais à vous en soucier. -------------------------------------------------------------------------------- /reference/forms/types/options/button_disabled.rst.inc: -------------------------------------------------------------------------------- 1 | disabled 2 | ~~~~~~~~ 3 | 4 | **type**: ``boolean`` **default**: ``false`` 5 | 6 | Si vous ne souhaitez pas qu'un utilisateur puisse cliquer sur un bouton, vous 7 | pouvez passer l'option ``disabled`` à ``true``. Il ne sera pas possible de 8 | soumettre un formulaire avec ce bouton, y compris en envoyant une requête manuelle, 9 | par exemple avec cURL. 10 | -------------------------------------------------------------------------------- /reference/forms/types/options/button_label.rst.inc: -------------------------------------------------------------------------------- 1 | label 2 | ~~~~~ 3 | 4 | **type**: ``string`` **default**: Le label est « déduit » du nom du champ. 5 | 6 | Définissez le label que vous souhaitez pour le bouton. Ce label peut aussi 7 | être défini directement dans le modèle. 8 | 9 | .. configuration-block:: 10 | 11 | .. code-block:: html+jinja 12 | 13 | {{ form_widget(form.save, { 'label': 'Cliquez ici' }) }} 14 | 15 | .. code-block:: html+php 16 | 17 | widget($form['save'], array('label' => 'Cliquez ici')) ?> 18 | -------------------------------------------------------------------------------- /reference/forms/types/options/button_translation_domain.rst.inc: -------------------------------------------------------------------------------- 1 | translation_domain 2 | ~~~~~~~~~~~~~~~~~~ 3 | 4 | **type**: ``string`` **default**: ``messages`` 5 | 6 | Cette option détermine le domaine de traduction qui doit être utilisé pour les 7 | libellés et les options qui sont affichées dans les champs. 8 | 9 | -------------------------------------------------------------------------------- /reference/forms/types/options/by_reference.rst.inc: -------------------------------------------------------------------------------- 1 | by_reference 2 | ~~~~~~~~~~~~ 3 | 4 | **type**: ``Boolean`` **default**: ``true`` 5 | 6 | Dans la plupart des cas, si vous avez un champ ``name``, alors vous vous attendez 7 | à ce que l'appel à ``setName`` soit fait sur l'objet sous-jacent. Pourtant, dans 8 | certains cas, ``setName`` ne doit *pas* être appelé. Définir ``by_reference`` vous 9 | assure que le setter est appelé dans tous les cas. 10 | 11 | Pour aller plus loin, voici un exemple simple:: 12 | 13 | $builder = $this->createFormBuilder($article); 14 | $builder 15 | ->add('title', 'text') 16 | ->add( 17 | $builder->create('author', 'form', array('by_reference' => ?)) 18 | ->add('name', 'text') 19 | ->add('email', 'email') 20 | ) 21 | 22 | Si ``by_reference`` est à true, voici ce qui se passe dans l'envers du décor lorsque 23 | vous faites un ``bind`` (ou ``handleRequest``) sur le formulaire:: 24 | 25 | $article->setTitle('...'); 26 | $article->getAuthor()->setName('...'); 27 | $article->getAuthor()->setEmail('...'); 28 | 29 | Notez que la méthode ``setAuthor`` n'est pas appelée. L'objet Author est modifié par référence. 30 | 31 | Si vous définissez ``by_reference`` à false, l'association ressemblera à ceci:: 32 | 33 | $article->setTitle('...'); 34 | $author = $article->getAuthor(); 35 | $author->setName('...'); 36 | $author->setEmail('...'); 37 | $article->setAuthor($author); 38 | 39 | Donc, tout ce que ``by_reference=false`` fait réellement est de forcer le framework à faire 40 | l'appel au setter de l'objet parent. 41 | 42 | De même, si vous utilisez le type de formulaire :doc:`collection` 43 | où la collection sous-jacente est un objet (comme un ``ArrayCollection`` Doctrine), alors 44 | ``by_reference`` doit être défini à ``false`` si vous avez besoin que 45 | le setter (ex ``setAuthors``) soit appelé. -------------------------------------------------------------------------------- /reference/forms/types/options/cascade_validation.rst.inc: -------------------------------------------------------------------------------- 1 | cascade_validation 2 | ~~~~~~~~~~~~~~~~~~ 3 | 4 | **type**: Boolean **default**: false 5 | 6 | Définissez cette option à ``true`` pour forcer la validation des types 7 | de formulaires imbriqués. 8 | Par exemple, si vous avez un ``ProductType`` qui imbrique un ``CategoryType``, 9 | définir ``cascade_validation`` à ``true`` pour le ``ProductType`` entrainera 10 | également la validation des données du ``CategoryType``. 11 | 12 | Au lieu d'utiliser cette option, vous pouvez également utiliser la contrainte 13 | ``Valid`` dans votre modèle pour forcer la validation d'un objet enfant stocké 14 | dans la propriété. -------------------------------------------------------------------------------- /reference/forms/types/options/compound.rst.inc: -------------------------------------------------------------------------------- 1 | compound 2 | ~~~~~~~~ 3 | 4 | **type**: ``boolean`` 5 | 6 | Cette option spécifie si un formulaire est composé. C'est indépendant de si 7 | oui ou non le formulaire a des enfants. Un formulaire peut être composé mais 8 | ne pas avoir d'enfants du tout (ex, une collection de formulaires vide). -------------------------------------------------------------------------------- /reference/forms/types/options/constraints.rst.inc: -------------------------------------------------------------------------------- 1 | constraints 2 | ~~~~~~~~~~~ 3 | 4 | **type**: array ou :class:`Symfony\\Component\\Validator\\Constraint` **default**: ``null`` 5 | 6 | Vous permet de rajouter une ou plusieurs contraintes de validation à un champ 7 | spécifique. Pour plus d'informations, consultez :ref:`Ajoutez une validation`. 8 | Cette option est ajoutée dans la classe :class:`Symfony\\Component\\Form\\Extension\\Validator\\Type\\FormTypeValidatorExtension`. 9 | -------------------------------------------------------------------------------- /reference/forms/types/options/data.rst.inc: -------------------------------------------------------------------------------- 1 | data 2 | ~~~~ 3 | 4 | **type**: divers **default**: Valeur par défaut du champ de l'objet sous-jacent (s'il y en a un) 5 | 6 | Lorsque vous créez un formulaire, chaque champ affiche initialement la valeur de 7 | la propriété correspondante à l'objet du formulaire (si un objet a été 8 | associé au formulaire). Si vous voulez surcharger la valeur initiale d'un formulaire 9 | ou juste d'un champ individuel, vous pouvez utiliser l'option ``data``:: 10 | 11 | $builder->add('token', 'hidden', array( 12 | 'data' => 'abcdef', 13 | )); 14 | 15 | 16 | -------------------------------------------------------------------------------- /reference/forms/types/options/data_class.rst.inc: -------------------------------------------------------------------------------- 1 | data_class 2 | ~~~~~~~~~~ 3 | 4 | **type**: ``string`` 5 | 6 | Cette option est utilisée pour définir le mapper de données approprié qui 7 | sera utilisé par le formulaire, donc vous pouvez l'utiliser pour tout type 8 | de champ de formulaire qui nécessite un objet. 9 | 10 | .. code-block:: php 11 | 12 | $builder->add('media', 'sonata_media_type', array( 13 | 'data_class' => 'Acme\DemoBundle\Entity\Media', 14 | )); -------------------------------------------------------------------------------- /reference/forms/types/options/data_timezone.rst.inc: -------------------------------------------------------------------------------- 1 | data_timezone 2 | ~~~~~~~~~~~~~ 3 | 4 | **type**: ``string`` **default**: Fuseau horaire par défaut du système 5 | 6 | Fuseau horaire dans lequel la donnée sera stockée. Il doit être l'un des 7 | `fuseaux horaires supportés par PHP`_ 8 | 9 | .. _`fuseaux horaires supportés par PHP`: http://php.net/manual/fr/timezones.php -------------------------------------------------------------------------------- /reference/forms/types/options/date_format.rst.inc: -------------------------------------------------------------------------------- 1 | format 2 | ~~~~~~ 3 | 4 | **type**: ``integer`` ou ``string`` **default**: ``IntlDateFormatter::MEDIUM`` 5 | 6 | Option passée à la classe ``IntlDateFormatter``, utilisée pour formatter 7 | la saisie de l'utilisateur au bon format. C'est essentiel quand l'option 8 | `widget`_ est définie comme ``single_text``, et elle définira la manière 9 | dont l'utilisateur devra saisir ses données. 10 | Par défaut, le format est déterminé selon la locale de l'utilisateur, ce qui 11 | signifie que le *format attendu sera différent pour différents utilisateurs*. 12 | Vous pouvez la surcharger en passant le format sous forme de chaîne de 13 | caractères. 14 | 15 | Pour plus d'informations sur les formats valides, lisez `Syntaxe des formats Date/Time`_. 16 | Par exemple, pour afficher un simple champ texte qui attend une saisie au format 17 | ``yyyy-MM-dd``, utilisez l'option suivante:: 18 | 19 | $builder->add('date_created', 'date', array( 20 | 'widget' => 'single_text', 21 | 'format' => 'yyyy-MM-dd', 22 | )); 23 | 24 | .. _`Syntaxe des formats Date/Time`: http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax 25 | -------------------------------------------------------------------------------- /reference/forms/types/options/date_input.rst.inc: -------------------------------------------------------------------------------- 1 | input 2 | ~~~~~ 3 | 4 | **type**: ``string`` **default**: ``datetime`` 5 | 6 | Le format de la donnée *finale*, c'est-à-dire le format dans lequel la date 7 | sera stockée dans l'objet sous-jacent. Les valeurs valides sont : 8 | 9 | * ``string`` (ex ``2011-06-05``) 10 | * ``datetime`` (un objet ``DateTime``) 11 | * ``array`` (ex ``array('year' => 2011, 'month' => 06, 'day' => 05)``) 12 | * ``timestamp`` (ex ``1307232000``) 13 | 14 | La valeur qui provient du formulaire sera également normalisée dans ce format. 15 | 16 | .. include:: /reference/forms/types/options/_date_limitation.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/options/date_widget.rst.inc: -------------------------------------------------------------------------------- 1 | widget 2 | ~~~~~~ 3 | 4 | **type**: ``string`` **default**: ``choice`` 5 | 6 | Désigne la manière dont le champ doit être affiché. Cette option accepte les 7 | cas suivants : 8 | 9 | * ``choice``: Affiche trois listes déroulantes. L'ordre des listes est défini 10 | par l'option `format`_. 11 | 12 | * ``text``: Affiche trois champs textes (mois, jour, année). 13 | 14 | * ``single_text``: Affiche un unique champ texte(text en version 2.0 ). La saisie 15 | de l'utilisateur sera validé en se basant sur l'option `format`_. 16 | 17 | .. include:: /reference/forms/types/options/_date_limitation.rst.inc 18 | -------------------------------------------------------------------------------- /reference/forms/types/options/days.rst.inc: -------------------------------------------------------------------------------- 1 | days 2 | ~~~~ 3 | 4 | **type**: ``array`` **default**: 1 à 31 5 | 6 | Liste des jours disponibles dans le type de champ ``day``. Cette option 7 | n'est utile que dans le cas où l'option ``widget`` est définie avec la 8 | valeur ``choice``:: 9 | 10 | 'days' => range(1,31) 11 | -------------------------------------------------------------------------------- /reference/forms/types/options/disabled.rst.inc: -------------------------------------------------------------------------------- 1 | disabled 2 | ~~~~~~~~ 3 | 4 | **type**: ``boolean`` **default**: ``false`` 5 | 6 | Si vous ne voulez pas qu'un utilisateur puisse modifier la valeur d'un champ, 7 | vous pouvez définir l'option ``disabled`` à true. Toute valeur soumise sera 8 | ignorée. 9 | -------------------------------------------------------------------------------- /reference/forms/types/options/empty_data.rst.inc: -------------------------------------------------------------------------------- 1 | empty_data 2 | ~~~~~~~~~~ 3 | 4 | **type**: ``divers`` **default**: ``array()`` si ``multiple`` ou ``expanded``, ``''`` sinon 5 | 6 | Cette option détermine quelle valeur le champ affichera si le choix ``empty_value`` 7 | est sélectionné. 8 | 9 | La valeur par défaut de cette option dépends des options du champ : 10 | 11 | * Si ``compound`` est à ``true`` et ``data_class`` est défini, alors ``new $data_class()``; 12 | * Si ``compound`` est à ``true`` et ``data_class`` n'est pas défini, alors ``array()``; 13 | * Si ``compound`` est à ``false``, alors ``null``. 14 | 15 | .. tip:: 16 | 17 | L'option ``compound`` est définie à ``true`` quand le champ représente en fait une collection 18 | de champs (ex un formulaire de champs). 19 | 20 | Par exemple, si vous voulez que le champ ``gender`` soit défini comme ``null`` si 21 | aucune valeur n'est sélectionnée, vous pouvez le faire comme ceci : 22 | 23 | .. code-block:: php 24 | 25 | $builder->add('gender', 'choice', array( 26 | 'choices' => array( 27 | 'm' => 'Masculin', 28 | 'f' => 'Féminin' 29 | ), 30 | 'required' => false, 31 | 'empty_value' => 'Choisissez votre sexe', 32 | 'empty_data' => null 33 | )); 34 | 35 | .. note:: 36 | 37 | Si vous voulez définir l'option ``empty_data`` pour l'intégralité de la 38 | la classe du formulaire, allez à l'article suivant :doc:`/cookbook/form/use_empty_data` 39 | -------------------------------------------------------------------------------- /reference/forms/types/options/empty_value.rst.inc: -------------------------------------------------------------------------------- 1 | empty_value 2 | ~~~~~~~~~~~ 3 | 4 | **type**: ``string`` ou ``Boolean`` 5 | 6 | .. versionadded:: 2.3 7 | Depuis la version 2.3, les valeurs vides ne sont supportées que si l'option 8 | ``expanded`` est définie à true. 9 | 10 | Cette option détermine si une option « vide » spéciale (ex : « Choisissez une option ») 11 | va apparaître en haut de la liste déroulante. Cette option ne s'applique que 12 | si l'option ``multiple`` est définie à false. 13 | 14 | * Ajoute une valeur vide avec « Choisissez une option » comme texte:: 15 | 16 | $builder->add('states', 'choice', array( 17 | 'empty_value' => 'Choisissez une option', 18 | )); 19 | 20 | * Garantie qu'aucune option « vide » n'est affichée:: 21 | 22 | $builder->add('states', 'choice', array( 23 | 'empty_value' => false, 24 | )); 25 | 26 | Si vous ne définissez pas l'option ``empty_value``, alors une option vide (sans texte) 27 | sera automatiquement ajoutée si et seulement si l'option ``required`` est à false:: 28 | 29 | // Une option vide (sans texte) sera ajoutée 30 | $builder->add('states', 'choice', array( 31 | 'required' => false, 32 | )); -------------------------------------------------------------------------------- /reference/forms/types/options/error_bubbling.rst.inc: -------------------------------------------------------------------------------- 1 | error_bubbling 2 | ~~~~~~~~~~~~~~ 3 | 4 | **type**: ``Boolean`` **default**: ``false`` 5 | 6 | .. include:: /reference/forms/types/options/_error_bubbling_body.rst.inc -------------------------------------------------------------------------------- /reference/forms/types/options/error_mapping.rst.inc: -------------------------------------------------------------------------------- 1 | .. versionadded:: 2.1 2 | L'option ``error_mapping`` est nouvelle depuis Symfony 2.1. 3 | 4 | error_mapping 5 | ~~~~~~~~~~~~~ 6 | 7 | **type**: ``array`` **default**: ``empty`` 8 | 9 | Cette option permet de modifier la cible de l'erreur de validation. 10 | 11 | Imaginez une méthode personnalisée nommée ``matchingCityAndZipCode`` qui valide 12 | si le nom d'une ville et d'un code postal correspondent. Malheuresement, il n' 13 | existe pas de champs "matchingCityAndZipCode" dans le formulaire, donc Symfony 14 | peux seulement afficher l'erreur en haut du formulaire. 15 | 16 | Avec la personnalisation error mapping, vous pouvez faire mieux: mapper l'erreur 17 | sur le champ city comme afficher ci-dessous:: 18 | 19 | public function setDefaultOptions(OptionsResolverInterface $resolver) 20 | { 21 | $resolver->setDefaults(array( 22 | 'error_mapping' => array( 23 | 'matchingCityAndZipCode' => 'city', 24 | ), 25 | )); 26 | } 27 | 28 | Ci-dessous, vous trouverez les règles du coté droit et gauche du mapping: 29 | 30 | * Le coté gauche contient le chemin des propriétés. 31 | * Si une violation est généré sur une méthode ou une propriété d'une classe, son 32 | chemin est simplement "propertyName". 33 | * Si une violation est généré sur l'entrée d'une ``array`` ou d'un objet 34 | ``ArrayAccess``, son chemin est ``[indexName]``. 35 | * Vous pouvez construire des chemins de propriété imbriquées en les enchaînant, 36 | en séparant les propriétés par des points. Par exemple: ``addresses[work].matchingCityAndZipCode`` 37 | * Le coté gauche du mapping accepte également un point ``.``, qui se réfère au 38 | au domaine. Cela signifie que toute erreur ajouté au champ est ajouté au champ 39 | imbriqué donné à la place. 40 | * La partie droite contient simplement le nom des champs du formulaire. 41 | -------------------------------------------------------------------------------- /reference/forms/types/options/expanded.rst.inc: -------------------------------------------------------------------------------- 1 | expanded 2 | ~~~~~~~~ 3 | 4 | **type**: ``Boolean`` **default**: ``false`` 5 | 6 | Si cette option est définie à true, des boutons radio ou des cases à 7 | cocher seront affichés (cela dépendra aussi de l'option ``multiple``). 8 | Si elle est à false, une liste déroulante sera affichée. -------------------------------------------------------------------------------- /reference/forms/types/options/extra_fields_message.rst.inc: -------------------------------------------------------------------------------- 1 | extra_fields_message 2 | ~~~~~~~~~~~~~~~~~~~~ 3 | 4 | **type**: ``string`` **default**: ``This form should not contain extra fields.`` 5 | 6 | C'est le message d'erreur de validation qui est utilisé si la donnée de 7 | formulaire soumise contient un ou plusieurs champs qui ne font pas partie 8 | de la définition de formulaire. La variable ``{{ extra_fields }}`` peut 9 | être utilisée pour afficher une liste de noms de champs supplémentaires soumis 10 | séparés par une virgule. -------------------------------------------------------------------------------- /reference/forms/types/options/grouping.rst.inc: -------------------------------------------------------------------------------- 1 | grouping 2 | ~~~~~~~~ 3 | 4 | **type**: ``integer`` **default**: ``false`` 5 | 6 | Cette valeur est utilisée en interne comme valeur de ``NumberFormatter::GROUPING_USED`` en utilisant 7 | la classe PHP ``NumberFormatter``. Sa documentation est inexistante mais il apparait que si vous la 8 | définissez à ``true``, les nombres seront regroupés avec les virgules ou par période (selon votre locale) : 9 | ``12345.123`` affichera ``12,345.123``. -------------------------------------------------------------------------------- /reference/forms/types/options/hours.rst.inc: -------------------------------------------------------------------------------- 1 | hours 2 | ~~~~~ 3 | 4 | **type**: ``integer`` **default**: 0 à 23 5 | 6 | Liste des heures disponibles dans le type de champ ``hours``. Cette option 7 | n'est utile que si l'option ``widget`` est définie à ``choice``. -------------------------------------------------------------------------------- /reference/forms/types/options/inherit_data.rst.inc: -------------------------------------------------------------------------------- 1 | inherit_data 2 | ~~~~~~~~~~~~ 3 | 4 | .. versionadded:: 2.3 5 | Cette option était connue sous le nom de ``virtual`` avant Symfony 2.3. 6 | 7 | **type**: ``boolean`` **default**: ``false`` 8 | 9 | Cette option indique si le formulaire hérite des données du formulaire parent. 10 | Elle peut être utile si vous avez à définir un lot de champs qui sont dupliqués 11 | dans plusieurs formulaires, consultez :doc:`/cookbook/form/inherit_data_option`. 12 | -------------------------------------------------------------------------------- /reference/forms/types/options/invalid_message.rst.inc: -------------------------------------------------------------------------------- 1 | invalid_message 2 | ~~~~~~~~~~~~~~~ 3 | 4 | **type**: ``string`` **default**: ``This value is not valid`` 5 | 6 | C'est le message d'erreur de validation qui est utilisé si la donnée saisie 7 | dans ce champ n'est pas compréhensible (c'est-à-dire que la validation échoue). 8 | 9 | Cela arrive, par exemple, quand l'utilisateur saisit une chaîne de caractères sans 10 | aucun sens dans un champ :doc:`time` et que cette chaîne 11 | ne peut être convertie en temps, ou alors si l'utilisateur saisit une chaîne 12 | (ex ``pomme``) dans un champ qui attend un nombre. 13 | 14 | La validation (par exemple définir une longueur minimum pour un champ) classique 15 | (logique métier) devrait contenir un message de validation avec vos règles de 16 | validation (:ref:`Référence`). 17 | -------------------------------------------------------------------------------- /reference/forms/types/options/invalid_message_parameters.rst.inc: -------------------------------------------------------------------------------- 1 | invalid_message_parameters 2 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 | 4 | **type**: ``array`` **default**: ``array()`` 5 | 6 | Lorsque vous définissez l'option ``invalid_message``, vous pourriez avoir besoin 7 | d'inclure des variables dans la chaîne de caractères. Cela est possible en ajoutant 8 | des paramètres à l'option, et en incluant les variables dans cette option:: 9 | 10 | $builder->add('some_field', 'some_type', array( 11 | // ... 12 | 'invalid_message' => 'Le format est invalide, il doit contenir %num% lettres', 13 | 'invalid_message_parameters' => array('%num%' => 6), 14 | )); -------------------------------------------------------------------------------- /reference/forms/types/options/label.rst.inc: -------------------------------------------------------------------------------- 1 | label 2 | ~~~~~ 3 | 4 | **type**: ``string`` **default**: Le libellé est deviné à partir du nom du champ. 5 | 6 | Définit le libellé qui sera utilisé à l'affichage du champ. Le libellé peut aussi 7 | être directement défini dans le template : 8 | 9 | .. code-block:: jinja 10 | 11 | {{ form_label(form.name, 'Votre nom') }} 12 | -------------------------------------------------------------------------------- /reference/forms/types/options/label_attr.rst.inc: -------------------------------------------------------------------------------- 1 | label_attr 2 | ~~~~~~~~~~ 3 | 4 | **type**: ``array`` **default**: ``array()`` 5 | 6 | Définit les attributs html pour l'élément ``