From 810d3c89d1a3f9691fc4ff294ccceb04c43c421d Mon Sep 17 00:00:00 2001 From: Larnu Date: Sun, 5 Oct 2014 20:24:46 +0200 Subject: [PATCH] translate spanish docs --- docs/guide-es/README.md | 5 +- .../images/application-lifecycle.graphml | 834 ++++++++++++++++++ .../guide-es/images/application-lifecycle.png | Bin 40306 -> 37006 bytes .../images/application-structure.graphml | 429 +++++++++ .../guide-es/images/application-structure.png | Bin 24774 -> 15874 bytes docs/guide-es/runtime-overview.md | 22 + docs/guide-es/structure-models.md | 382 ++++++++ docs/guide-es/structure-modules.md | 191 ++++ 8 files changed, 1861 insertions(+), 2 deletions(-) create mode 100644 docs/guide-es/images/application-lifecycle.graphml create mode 100644 docs/guide-es/images/application-structure.graphml create mode 100644 docs/guide-es/runtime-overview.md create mode 100644 docs/guide-es/structure-models.md create mode 100644 docs/guide-es/structure-modules.md diff --git a/docs/guide-es/README.md b/docs/guide-es/README.md index 17d2e8833d..d39c1db9c5 100644 --- a/docs/guide-es/README.md +++ b/docs/guide-es/README.md @@ -35,11 +35,11 @@ Estructura de una aplicación * [Aplicaciones](structure-applications.md) * [Componentes de una aplicación](structure-application-components.md) * [Controladores](structure-controllers.md) -* **TBD** [Modelos](structure-models.md) +* [Modelos](structure-models.md) * [Vistas](structure-views.md) * [Filtros](structure-filters.md) * [Widgets](structure-widgets.md) -* **TBD** [Módulos](structure-modules.md) +* [Módulos](structure-modules.md) * **TBD** [Recursos](structure-assets.md) * **TBD** [Extensiones](structure-extensions.md) @@ -47,6 +47,7 @@ Estructura de una aplicación Gestión de las peticiones ------------------------- +* [Información general](runtime-overview.md) * **TBD** [Bootstrapping](runtime-bootstrapping.md) * **TBD** [Rutas](runtime-routing.md) * **TBD** [Peticiones](runtime-requests.md) diff --git a/docs/guide-es/images/application-lifecycle.graphml b/docs/guide-es/images/application-lifecycle.graphml new file mode 100644 index 0000000000..49bbfba708 --- /dev/null +++ b/docs/guide-es/images/application-lifecycle.graphml @@ -0,0 +1,834 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + usuario + + + + + + + + + + + + + + + + + + + + modelo + + + + + + + + + + + + + + + + + base de datos + + + + + + + + + + + + + + + + + + + + + + + + + + + + vista + + + + + + + + + + + + + + + + + + + + controlador + + + + + + + + + + Folder 1 + + + + + + + + + + + + + + + + crear acción + + + + + + + + + + + + + + + + + ejecutar filtros + + + + + + + + + + + + + + + + + + + + acción + + + + + + + + + + Folder 3 + + + + + + + + + + + + + + + + cargar modelo + + + + + + + + + + + + + + + + + interpretar vista + + + + + + + + + + + + + + + + + + + + + respuesta + + + + + + + + + + + + + + + + + petición + + + + + + + + + + + + + + + + + + + + aplicación + + + + + + + + + + Folder 2 + + + + + + + + + + + + + + + + resolver ruta + + + + + + + + + + + + + + + + + crear controlador + + + + + + + + + + + + + + + + + + + + + + script de entrada + + + + + + + + + + Folder 4 + + + + + + + + + + + + + + + + cargar configuración de aplicación + + + + + + + + + + + + + + + + + ejecutar aplicación + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="66px" viewBox="0 0 57 66" enable-background="new 0 0 57 66" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3799" y1="-2276.8809" x2="27.6209" y2="-2306.6792" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_13_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + <path fill="#2068A3" stroke="#2068A3" d="M28.106,33.487c-8.112,0-12.688,4.312-12.688,10.437c0,7.422,12.688,10.438,12.688,10.438 + s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.487,28.106,33.487z M26.288,53.051c0,0-7.135-2.093-8.805-7.201 + c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_2_" cx="14.2417" cy="9.1006" r="53.247" gradientTransform="matrix(1 0 0 -1 0.04 65.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#74AEEE"/> + <stop offset="1" style="stop-color:#2068A3"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#2068A3" stroke-miterlimit="10" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.022,7.807-14.022,7.807s-10.472-2.484-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path fill="#5491CF" stroke="#2068A3" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397c-0.514,1.027-1.669,4.084-1.669,5.148 + c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.335-2.36c-3.601-1.419-4.071-3.063-5.89-4.854 + C12.523,47.135,12.878,45,13.404,44.173z"/> + <path fill="#5491CF" stroke="#2068A3" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617c0.516,1.025,3.617,3.693,3.617,6.617 + c0,5.186-10.27,8.576-16.698,9.145c1.429,4.938,11.372,1.293,13.804-0.313c3.563-2.354,4.563-5.133,7.854-3.705 + C47.754,49.045,48.006,46.574,45.777,43.924z"/> + <path fill="none" stroke="#2068A3" stroke-linecap="round" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + <path fill="none" stroke="#2068A3" stroke-linecap="round" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.623" cy="-2278.646" r="23.425" fx="23.0534" fy="-2281.1357" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="5761.7578" y1="11330.6484" x2="5785.3872" y2="11424.0977" gradientTransform="matrix(0.275 0 0 0.2733 -1558.9874 -3088.4209)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M27.958,6.333c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.083,13.952,36.271,6.268,27.958,6.333z"/> + <path id="Hair_Young_Brown_1_" fill="#CC9869" stroke="#99724F" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> + <path fill="#4B4B4B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M28.105,2 + C22.464,2,20.2,4.246,18.13,5.533C29.753,2.865,41.152,10.375,44.46,20.5C44.459,16.875,44.459,2,28.105,2z"/> + <path fill="#9B9B9B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M11.151,17.751 + C12.878,8.25,18.686,6.309,25.273,7.127C31.295,7.875,36.93,10.491,44.459,20.5C37.777,7.125,20.278-3.375,9.903,3.921 + C5.569,6.97,4.903,13.375,11.151,17.751z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" + x="0px" y="0px" width="41px" height="48px" viewBox="-0.875 -0.887 41 48" enable-background="new -0.875 -0.887 41 48" + xml:space="preserve"> +<defs> +</defs> +<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-979.1445" x2="682.0508" y2="-979.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_1_)" d="M19.625,36.763C8.787,36.763,0,34.888,0,32.575v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,34.888,30.464,36.763,19.625,36.763z"/> +<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-973.1445" x2="682.0508" y2="-973.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_2_)" d="M19.625,36.763c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.927-18.396,3.927 + c-9.481,0-17.396-1.959-18.396-3.927l-1.229,2C0,34.888,8.787,36.763,19.625,36.763z"/> +<path fill="#3C89C9" d="M19.625,26.468c10.16,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.554,5.438 + c-12.125,0-18.467-2.484-19.541-4.918C-0.127,29.125,9.465,26.468,19.625,26.468z"/> +<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-965.6948" x2="682.0508" y2="-965.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_3_)" d="M19.625,23.313C8.787,23.313,0,21.438,0,19.125v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,21.438,30.464,23.313,19.625,23.313z"/> +<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-959.6948" x2="682.0508" y2="-959.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_4_)" d="M19.625,23.313c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926 + c-9.481,0-17.396-1.959-18.396-3.926l-1.229,2C0,21.438,8.787,23.313,19.625,23.313z"/> +<path fill="#3C89C9" d="M19.476,13.019c10.161,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.555,5.438 + c-12.125,0-18.467-2.485-19.541-4.918C-0.277,15.674,9.316,13.019,19.476,13.019z"/> +<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-952.4946" x2="682.0508" y2="-952.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_5_)" d="M19.625,10.113C8.787,10.113,0,8.238,0,5.925v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,8.238,30.464,10.113,19.625,10.113z"/> +<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-946.4946" x2="682.0508" y2="-946.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_6_)" d="M19.625,10.113c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926 + c-9.481,0-17.396-1.959-18.396-3.926L0,5.925C0,8.238,8.787,10.113,19.625,10.113z"/> +<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="644.0293" y1="-943.4014" x2="680.8223" y2="-943.4014" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<ellipse fill="url(#SVGID_7_)" cx="19.625" cy="3.926" rx="18.396" ry="3.926"/> +<path opacity="0.24" fill="#FFFFFF" enable-background="new " d="M31.04,45.982c0,0-4.354,0.664-7.29,0.781 + c-3.125,0.125-8.952,0-8.952,0l-2.384-10.292l0.044-2.108l-1.251-1.154L9.789,23.024l-0.082-0.119L9.5,20.529l-1.65-1.254 + L5.329,8.793c0,0,4.213,0.903,7.234,1.07s8.375,0.25,8.375,0.25l3,9.875l-0.25,1.313l1.063,2.168l2.312,9.645l-0.521,1.416 + l1.46,1.834L31.04,45.982z"/> +</svg> + + + + diff --git a/docs/guide-es/images/application-lifecycle.png b/docs/guide-es/images/application-lifecycle.png index 1a47ee99dd5df6b3f8d9a59ad21e003f265940bd..046749fabe1475034e4d82c7fa9cb261003fd915 100644 GIT binary patch literal 37006 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 literal 40306 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 Z3XP=4&l+RdW9~@TZq8qSb<-*E+~4F#ey0Ec diff --git a/docs/guide-es/images/application-structure.graphml b/docs/guide-es/images/application-structure.graphml new file mode 100644 index 0000000000..dde73594e4 --- /dev/null +++ b/docs/guide-es/images/application-structure.graphml @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + componente +de +aplicación + + + + + + + + + + + + + + + + + script de entrada + + + + + + + + + + + + + + + + + aplicación + + + + + + + + + + + + + + + + + controlador + + + + + + + + + + + + + + + + + filtro + + + + + + + + + + + + + + + + + módulo + + + + + + + + + + + + + + + + + vista + + + + + + + + + + + + + + + + + modelo + + + + + + + + + + + + + + + + + widget + + + + + + + + + + + + + + + + + recursos + + + + + + + + + + + + + + + + + 1:1 + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 1..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + diff --git a/docs/guide-es/images/application-structure.png b/docs/guide-es/images/application-structure.png index d3a55498889d296ca707527f5c9ab5fae217c1c5..b0199c954318934f611ad39639e944696b2800a8 100644 GIT binary patch literal 15874 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

WTZ1E~fy3MKk*Z_$vB~k~vQcv2R?7fOep@ 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: No es obligatorio basar las clases modelo en [[yii\base\Model]]. Sin embargo, debido a que hay muchos componentes de Yii construidos para dar soporte a [[yii\base\Model]], por lo general es la clase base preferible para un modelo. + +### Atributos + +Los modelos representan los datos de negocio en términos de *atributos*. Cada atributos es como una propiedad públicamente accesible de un modelo. El método [[yii\base\Model::attributes()]] especifica qué atributos tiene la clase modelo. + +Se puede acceder a un atributo como se accede a una propiedad de un objeto normal. + +```php +$model = new \app\models\ContactForm; + +// "name" es un atributo de ContactForm +$model->name = 'example'; +echo $model->name; +``` + +También se puede acceder a los atributos como se accede a los elementos de un array, gracias al soporte para [ArrayAccess](http://php.net/manual/es/class.arrayaccess.php) y [ArrayIterator](http://php.net/manual/es/class.arrayiterator.php) que brinda [[yii\base\Model]]: + +```php +$model = new \app\models\ContactForm; + +// acceder a atributos como elementos de array +$model['name'] = 'example'; +echo $model['name']; + +// iterar entre atributos +foreach ($model as $name => $value) { + echo "$name: $value\n"; +} +``` + +### Definir Atributos + +Por defecto, si un modelo extiende directamente a [[yii\base\Model]], todas sus variables miembro no estáticas son atributos. Por ejemplo, la siguiente clase modelo 'ContactForm' tiene cuatro atributos: 'name', 'email', 'subject', 'body'. El modelo 'ContactForm' se usa para representar los datos de entrada recibidos desde un formulario HTML. + +```php +namespace app\models; + +use yii\base\Model; + +class ContactForm extends Model +{ + public $name; + public $email; + public $subject; + public $body; +} +``` + +Se puede sobrescribir [[yii\base\Model::attributes()]] para definir los atributos de diferente manera. El método debe devolver los nombres de los atributos de un modelo. Por ejemplo [[yii\db\ActiveRecord]] lo hace devolviendo el nombre de las columnas de la tabla de la base de datos asociada como el nombre de sus atributos. Hay que tener en cuenta que también puede necesitar sobrescribir los métodos mágicos como `__get()`, `__set()` de modo que se puede acceder a los atributos como a propiedades de objetos normales. + +### Etiquetas de atributo + +Cuando se muestran valores o se obtienen entradas para atributos, normalmente se necesita mostrar etiquetas asociadas a los atributos. Por ejemplo, dado un atributo con nombre 'segundoApellido', es posible que se quiera mostrar la etiqueta 'Segundo Apellido' ya que es más fácil de interpretar por el usuario final en lugares como campos de formularios y en mensajes de error. + +Se puede obtener la etiqueta de un atributo llamando a [[yii\base\Model::getAttributeLabel()]] . Por ejemplo: + +```php +$model = new \app\models\ContactForm; + +// muestra "Name" +echo $model->getAttributeLabel('name'); +``` + +Por defecto, una etiqueta de atributo se genera automáticamente a partir del nombre de atributo. La generación se hace con el método [[yii\base\Model::generateAttributeLabel()]]. Este convertirá los nombres de variables de tipo came-case en múltiples palabras con la primera letra de cada palabra en mayúsculas. Por ejemplo 'usuario' se convertirá en 'Nombre', y 'primerApellido' se convertirá en 'Primer Apellido'. +Si no se quieren usar las etiquetas generadas automáticamente, se puede sobrescribir [[yii\base\Model::attributeLabels()]] a una declaración de etiquetas de atributo especifica. Por ejemplo: + +```php +namespace app\models; + +use yii\base\Model; + +class ContactForm extends Model +{ + public $name; + public $email; + public $subject; + public $body; + + public function attributeLabels() + { + return [ + 'name' => 'Your name', + 'email' => 'Your email address', + 'subject' => 'Subject', + 'body' => 'Content', + ]; + } +} +``` + +Para aplicaciones con soporte para múltiples idiomas, se puede querer traducir las etiquetas de los atributos. Esto se puede hacer en el método [[yii\base\Model::attributeLabels()|attributeLabels()]], como en el siguiente ejemplo: + +```php +public function attributeLabels() +{ + return [ + 'name' => \Yii::t('app', 'Your name'), + 'email' => \Yii::t('app', 'Your email address'), + 'subject' => \Yii::t('app', 'Subject'), + 'body' => \Yii::t('app', 'Content'), + ]; +} +``` + +Incluso se puede definir etiquetas de atributo condicionales. Por ejemplo, basándose en el [escenario](#scenarios) en que se esta usando el modelo, se pueden devolver diferentes etiquetas para un mismo atributo. + +> Info: Estrictamente hablando, los atributos son parte de las [vistas](structure-views.md). Pero declarar las etiquetas en los modelos, a menudo, es muy conveniente y puede generar a un código muy limpio y reutilizable. + +## Escenarios + +Un modelo puede usarse en diferentes *escenarios*. Por ejemplo, un modelo 'Usuario', puede ser utilizado para recoger entradas de inicio de sesión de usuarios, pero también puede usarse para generar usuarios. En diferentes escenarios, un modelo puede usar diferentes reglas de negocio y lógica. Por ejemplo, un atributo 'email' puede ser requerido durante un registro de usuario, pero no ser necesario durante el inicio de sesión del mismo. + +Un modelo utiliza la propiedad [[yii\base\Model::scenario]] para mantener saber en qué escenario se esta usando. Por defecto, un modelo soporta sólo un escenario llamado 'default'. El siguiente código muestra dos maneras de establecer el escenario en un modelo. + +```php +// el escenario se establece como una propiedad +$model = new User; +$model->scenario = 'login'; + +// el escenario se establece mediante configuración +$model = new User(['scenario' => 'login']); +``` + +Por defecto, los escenarios soportados por un modelo se determinan por las [reglas de validación](#validation-rules) declaradas en el modelo. Sin embargo, se puede personalizar este comportamiento sobrescribiendo el método [[yii\base\Model::scenarios()]], como en el siguiente ejemplo: + +```php +namespace app\models; + +use yii\db\ActiveRecord; + +class User extends ActiveRecord +{ + public function scenarios() + { + return [ + 'login' => ['username', 'password'], + 'register' => ['username', 'email', 'password'], + ]; + } +} +``` + +> Info: En el anterior y en los siguientes ejemplos, las clases modelo extienden a [[yii\db\ActiveRecord]] porque el uso de múltiples escenarios normalmente sucede con clases de [Registros Activos](db-active-record.md). + +El método 'scenarios()' devuelve un array cuyas claves son el nombre de escenario y los valores correspondientes a los *atributos activos*. Un atributo activo puede ser [asignado masivamente](#massive-assignment) y esta sujeto a [validación](#validation-rules). En el anterior ejemplo, los atributos 'username' y 'password' están activados en el escenario 'login'; mientras que en el escenario 'register', el atributo 'email' esta activado junto con 'username' y 'password'. + +La implementación por defecto de los 'scenarios()' devolverá todos los escenarios encontrados en el método de declaración de las reglas de validación [[yii\base\Model::rules()]]. Cuando se sobrescribe 'scenarios()', si se quiere introducir nuevos escenarios además de los predeterminados, se puede hacer como en el siguiente ejemplo: + +```php +namespace app\models; + +use yii\db\ActiveRecord; + +class User extends ActiveRecord +{ + public function scenarios() + { + $scenarios = parent::scenarios(); + $scenarios['login'] = ['username', 'password']; + $scenarios['register'] = ['username', 'email', 'password']; + return $scenarios; + } +} +``` + +La característica escenario se usa principalmente en las [validaciones](#validation-rules) y por la [asignación masiva de atributos](#massive-assignment). Aunque también se puede usar para otros propósitos. Por ejemplo, se pueden declarar [etiquetas de atributo](#attribute-labels) diferentes basándose en el escenario actual. + +## Reglas de Validación + +Cuando un modelo recibe datos del usuario final, estos deben ser validados para asegurar que cumplan ciertas reglas (llamadas *reglas de validación*, también conocidas como *reglas de negocio*). Por ejemplo, dado un modelo 'ContactForm', se puede querer asegurar que ningún atributo este vacío y que el atributo 'email' contenga una dirección de correo válida. Si algún valor no cumple con las reglas, se debe mostrar el mensaje de error apropiado para ayudar al usuario a corregir estos errores. + +Se puede llamar a [[yii\base\Model::validate()]] para validar los datos recibidos. El método se usará para validar las reglas declaradas en [[yii\base\Model::rules()]] para validar cada atributo relevante. Si no se encuentran errores, se devolverá true. De otro modo, este almacenará los errores en la propiedad [[yii\base\Model::errors]] y devolverá falso. Por ejemplo: + +```php +$model = new \app\models\ContactForm; + +// establece los atributos del modelo con la entrada de usuario +$model->attributes = \Yii::$app->request->post('ContactForm'); + +if ($model->validate()) { + // todas las entradas validadas +} else { + // validación fallida: $errors es un array que contiene los mensajes de error + $errors = $model->errors; +} +``` + +Para declarar reglas de validación asociadas a un modelo, se tiene que sobrescribir el método [[yii\base\Model::rules()]] para que devuelva las reglas que los atributos del modelo deben satisfacer. El siguiente ejemplo muestra las reglas de validación declaradas para el modelo 'ContactForm'. + +```php +public function rules() +{ + return [ + // name, email, subject y body son atributos requeridos + [['name', 'email', 'subject', 'body'], 'required'], + + // el atribuido email debe ser una dirección de correo electrónico válida + ['email', 'email'], + ]; +} +``` + +Una regla puede usarse para validar uno o más atributos, y un atributo puede validarse por una o múltiples reglas. Por favor refiérase a la sección [Validación de entrada](input-validation.md) para obtener más detalles sobre cómo declarar reglas de validación. + +A veces, solamente se quiere aplicar una regla en ciertos [escenarios](#scenarios). Para hacerlo, se puede especificar la propiedad 'on' de una regla, como en el siguiente ejemplo: + +```php +public function rules() +{ + return [ + // username, email y password son obligatorios en el escenario “register” + [['username', 'email', 'password'], 'required', 'on' => 'register'], + + // username y password son obligatorios en el escenario “login” + [['username', 'password'], 'required', 'on' => 'login'], + ]; +} +``` + +Si no se especifica la propiedad 'on', la regla se aplicará en todos los escenarios. Se llama a una regla *regla activa* si esta puede aplicarse en el [[yii\base\Model::scenario|scenario]] actual. + +Un atributo será validado si y sólo si es un atributo activo declarado en 'scenarios()' y esta asociado con una o más reglas activas declaradas en 'rules()'. + +## Asignación Masiva + +La asignación masiva es una buena forma de rellenar los atributos de un modelo con las entradas de usuario en una única línea de código. Rellena los atributos de un modelo asignando los datos de entrada directamente a las propiedades de [[yii\base\Model::$attributes]]. Los siguientes dos ejemplos son equivalentes, ambos intentan asignar los datos enviados por el usuario final a través de un formulario a los atributos del modelo 'ContactForm'. Claramente, el primero, que usa la asignación masiva, es más claro y menos propenso a errores que el segundo: + +```php +$model = new \app\models\ContactForm; +$model->attributes = \Yii::$app->request->post('ContactForm'); +``` + +```php +$model = new \app\models\ContactForm; +$data = \Yii::$app->request->post('ContactForm', []); +$model->name = isset($data['name']) ? $data['name'] : null; +$model->email = isset($data['email']) ? $data['email'] : null; +$model->subject = isset($data['subject']) ? $data['subject'] : null; +$model->body = isset($data['body']) ? $data['body'] : null; +``` + +### Atributos Seguros + +La asignación masiva sólo se aplica a los llamados *atributos seguros* qué son los atributos listados en [[yii\base\Model::scenarios()]] para el actual [[yii\base\Model::scenario|scenario]] del modelo. Por ejemplo, si en el modelo 'User' tenemos la siguiente declaración de escenario, entonces cuando el escenario actual sea 'login', sólo los atributos 'username' y 'password' podrán ser asignados masivamente. Cualquier otro atributo permanecerá intacto + +```php +public function scenarios() +{ + return [ + 'login' => ['username', 'password'], + 'register' => ['username', 'email', 'password'], + ]; +} +``` + +> Info: La razón de que la asignación masiva sólo se aplique a los atributos seguros es debida a que se quiere controlar qué atributos pueden ser modificados por los datos del usuario final. Por ejemplo, si el modelo 'User' tiene un atributo 'permission' que determina los permisos asignados al usuario, se quiere que estos atributos sólo sean modificados por administradores desde la interfaz backend. + +Debido a hecho que la implementación por defecto de [[yii\base\Model::scenarios()]] devolverá todos los escenarios y atributos encontrados en[[yii\base\Model::rules()]], si no se sobrescribe este método, significa que un atributo es seguro mientras aparezca en una de las reglas de validación activas. + +Por esta razón, se proporciona un validador especial con alias 'safe' con el que se puede declarar un atributo como seguro sin llegar a validarlo. Por ejemplo, las siguientes reglas declaran que los atributos 'title' y 'description' son atributos seguros. + +```php +public function rules() +{ + return [ + [['title', 'description'], 'safe'], + ]; +} +``` + +### Atributos Inseguros + +Como se ha descrito anteriormente, el método [[yii\base\Model::scenarios()]] sirve para dos propósitos: determinar qué atributos deben ser validados y determinar qué atributos son seguros. En situaciones poco comunes, se puede querer validar un atributo pero sin marcarlo como seguro. Se puede hacer prefijando el signo de exclamación '!' delante del nombre del atributo cuando se declaran en 'scenarios()', como el atributo 'secret' del siguiente ejemplo: + +```php +public function scenarios() +{ + return [ + 'login' => ['username', 'password', '!secret'], + ]; +} +``` + +Cuando el modelo esté en el escenario 'login', los tres atributos serán validados. Sin embargo, sólo los atributos 'username' y 'password' se asignarán masivamente. Para asignar un valor de entrada al atribuido 'secret', se tendrá que hacer explícitamente como en el ejemplo: + +```php +$model->secret = $secret; +``` + +## Exportación de Datos + +A menudo necesitamos exportar modelos a diferentes formatos. Por ejemplo, se puede querer convertir un conjunto de modelos a formato JSON o Excel. El proceso de exportación se puede dividir en dos pasos independientes. En el primer paso, se convierten los modelos en arrays; en el segundo paso, los arrays se convierten a los formatos deseados. Nos puede interesar fijarnos en el primer paso, ya que el segundo paso se puede lograr mediante un formateador de datos genérico, tal como [[yii\web\JsonResponseFormatter]]. +La manera más simple de convertir un modelo en un array es usar la propiedad [[yii\base\Model::$attributes]]. Por ejemplo: + +```php +$post = \app\models\Post::findOne(100); +$array = $post->attributes; +``` + +Por defecto, la propiedad [[yii\base\Model::$attributes]] devolverá los valores de *todos* los atributos declarados en [[yii\base\Model::attributes()]]. + +Una manera más flexible y potente de convertir un modelo en un array es usar el método [[yii\base\Model::toArray()]]. Su funcionamiento general es el mismo que el de [[yii\base\Model::$attributes]]. Sin embargo, este permite elegir que elementos de datos, llamados *campos*, queremos poner en el array resultante y elegir como debe ser formateado. De hecho, es la manera por defecto de exportar modelos en desarrollo de servicios Web RESTful, tal y como se describe en [Formatos de Respuesta](rest-response-formatting.md). + +### Campos +Un campo es simplemente un elemento nombrado en el array resultante de ejecutar el método [[yii\base\Model::toArray()]] de un modelo. +Por defecto, los nombres de los campos son equivalentes a los nombres de los atributos. Sin embargo, se puede modificar este comportamiento sobrescribiendo el método [[yii\base\Model::fields()|fields()]] y/o el método [[yii\base\Model::extraFields()|extraFields()]]. Ambos métodos deben devolver una lista de las definiciones de los campos. Los campos definidos mediante 'fields()' son los campos por defecto, esto significa que 'toArray()' devolverá estos campos por defecto. El método 'extraFields()' define campos adicionalmente disponibles que también pueden devolverse mediante 'toArray()' siempre y cuando se especifiquen a través del parámetro '$expand'. Por ejemplo, el siguiente código devolverá todos los campos definidos en 'fields()' y los campos 'prettyName' y 'fullAdress' si estos están definidos en 'extraFields()'. + +```php +$array = $model->toArray([], ['prettyName', 'fullAddress']); +``` + +Se puede sobrescribir 'fields()' para añadir, eliminar, renombrar o redefinir campos. El valor devuelto por 'fields()' debe se un array. Las claves del array son los nombres de los campos, y los valores son las correspondientes definiciones de los campos que pueden ser nombres de propiedades/atributos o funciones anónimas que devuelvan los correspondientes valores de campo. En el caso especial en que un nombre de un campo es el mismo a su definición de nombre de atributo, se puede omitir la clave del array. Por ejemplo: + +```php +// lista explícitamente cada campo, es mejor usarlo cuando nos queremos asegurar +// de que los cambios en la tabla de la base de datos o los atributos del modelo +// no modifiquen los campos(para asegurar compatibilidades para versiones anteriores de API) +public function fields() +{ + return [ + // el nombre del campo es el mismo que el nombre de atributo + 'id', + + // el nombre del campo es “email”, el nombre de atributo correspondiente es “email_address” + 'email' => 'email_address', + + // El nombre del campo es “name”, su valor esta definido por una llamada de retorno PHP + 'name' => function () { + return $this->first_name . ' ' . $this->last_name; + }, + ]; +} + +// filtrar algunos campos, es mejor usarlo cuando se quiere heredar la implementación del padre +// y discriminar algunos campos sensibles. +public function fields() +{ + $fields = parent::fields(); + + // elimina campos que contengan información sensible. + unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']); + + return $fields; +} +``` + +>Atención: debido a que por defecto todos los atributos de un modelo serán incluidos en el array exportado, se debe examinar los datos para asegurar que no contienen información sensible. Si existe dicha información, se debe sobrescribir 'fields()' para filtrarla. En el anterior ejemplo, se filtra 'aut_key', 'password_hash' y 'password_reset_token'. + +## Mejores Prácticas + +Los modelos son los lugares centrales para representar datos de negocio, reglas y lógica. Estos a menudo necesitan ser reutilizados en diferentes lugares. En una aplicación bien diseñada, los modelos normalmente son más grandes que los [controladores](structure-controllers.md). + +En resumen, los modelos: +* pueden contener atributos para representar los datos de negocio; +* pueden contener reglas de validación para asegurar la validez e integridad de los datos; +* pueden contener métodos que para implementar la lógica de negocio; +* NO deben acceder directamente a peticiones, sesiones, o otro tipo de datos de entorno. Estos datos deben ser inyectados por los [controladores](structure-controllers.md) en los modelos. +* deben evitar embeber HTML o otro código de presentación – esto es mejor hacerlo en las [vistas](structure-views.md); +* evitar tener demasiados [escenarios](#scenarios) en un mismo modelo. + +Generalmente se puede considerar la última recomendación cuando se estén desarrollando grandes sistemas complejos. En estos sistemas, los modelos podrían ser muy grandes debido a que podrían ser usados en muchos lugares y por tanto contener muchos conjuntos de reglas y lógicas de negocio. A menudo esto desemboca en un código muy difícil de mantener ya que una simple modificación en el código puede afectar a muchos sitios diferentes. Para mantener el código más fácil de mantener, se puede seguir la siguiente estrategia: + +* Definir un conjunto de clases modelo base que sean compartidas por diferentes [aplicaciones](structure-applications.md) o [módulos](structure-modules.md). Estas clases modelo deben contener el conjuntos mínimos de reglas y lógica que sean comunes para todos sus usos. +* En cada [aplicación](structure-applications.md) o [módulo](structure-modules.md) que use un modelo, definir una clase modelo concreta que extienda a la correspondiente clase modelo base. La clase modelo concreta debe contener reglas y lógica que sean específicas para esa aplicación o módulo. + +Por ejemplo, en la [Plantilla de Aplicación Avanzada](tutorial-advanced-app.md), definiendo una clase modelo base 'common\models\Post'. Después en la aplicación front end, definiendo y usando una clase modelo concreta 'frontend\models\Post' que extienda a 'common\models\Post'. Y de forma similar en la aplicación back end, definiendo 'backend\models\Post'. Con esta estrategia, nos aseguramos que el código de 'frontend\models\Post' es específico para la aplicación front end, y si se efectúa algún cambio en el, no nos tenemos que preocupar de si el cambio afectará a la aplicación back end. diff --git a/docs/guide-es/structure-modules.md b/docs/guide-es/structure-modules.md new file mode 100644 index 0000000000..4501ec896d --- /dev/null +++ b/docs/guide-es/structure-modules.md @@ -0,0 +1,191 @@ +Módulos +======= +Los módulos son unidades de software independientes que consisten en [modelos](structure-models.md), [vistas](structure-views.md), [controladores](structure-controllers.md), y otros componentes de apoyo. Los usuarios finales pueden acceder a los controladores de un módulo cuando éste está instalado en la [aplicación](structure-applications.md). Por éstas razones, los módulos a menudo se considerados como mini-aplicaciones. Los módulos difieren de las [aplicaciones](structure-applications.md) en que los módulos no pueden ser desplegados solos y tienen que residir dentro de aplicaciones. + +## Creación de Módulos + +Un módulo está organizado de tal manera que contiene un directorio llamado [[yii\base\Module::basePath|base path]] del módulo. Dentro de este directorio, hay subdirectorios tales como 'controllers', 'models', 'views', que contienen controladores, modelos, vistas y otro código, exactamente como una aplicación. El siguiente ejemplo muestra el contenido dentro de un módulo: + +``` +forum/ + Module.php archivo clase módulo + controllers/ contiene archivos de la clase controlador + DefaultController.php archivo clase controlador por defecto + models/ contiene los archivos de clase modelo + views/ contiene las vistas de controlador y los archivos de diseño + layouts/ contiene los archivos de diseño de las vistas + default/ contiene los archivos de vista del DefaultController + index.php archivo de vista del index +``` + +### Clases Módulo + +Cada módulo debe tener una única clase módulo que extiende a [[yii\base\Module]]. La clase debe encontrarse directamente debajo del [[yii\base\Module::basePath|base path]] y debe ser [autocargable](concept-autoloading.md). Cuando se está accediendo a un módulo, se creará una única instancia de la clase módulo correspondiente. Como en las [instancias de aplicación](structure-applications.md), las instancias de módulo se utilizan para compartir datos y componentes de código dentro de los módulos. + +El siguiente ejemplo muestra como podría ser una clase módulo. + +```php +namespace app\modules\forum; + +class Module extends \yii\base\Module +{ + public function init() + { + parent::init(); + + $this->params['foo'] = 'bar'; + // ... otro código de inicialización ... + } +} +``` + +Si el método 'init()' contiene mucho código de inicialización de las propiedades del módulo, también se puede guardar en términos de configuración y cargarlo con el siguiente código ‘init()’: + +```php +public function init() +{ + parent::init(); + // inicializa el módulo con la configuración cargada desde config.php + \Yii::configure($this, require(__DIR__ . '/config.php')); +} +``` + +donde el archivo de configuracion ‘config.php’ puede contaner el siguiente contenido, similar al de [configuraciones de aplicacion](structure-applications.md#application-configurations). + +```php + [ + // lista de configuraciones de componente + ], + 'params' => [ + // lista de parámetros + ], +]; +``` + +### Controladores en Módulos + +Cuando se crean controladores en un modelo, una convención es poner las clases controlador debajo del sub espacio de nombres de ‘controllers’ del espacio de nombres de la clase módulo. Esto también significa que los archivos de la clase controlador deben ponerse en el directorio ‘controllers’ dentro del [[yii\base\Module::basePath|base path]] del módulo. Por ejemplo, para crear un controlador ‘post’ en el módulo ‘forum’ mostrado en la última subdivisión, se debe declarar la clase controlador de la siguiente manera: + +```php +namespace app\modules\forum\controllers; + +use yii\web\Controller; + +class PostController extends Controller +{ + // ... +} +``` + +Se puede personalizar el espacio de nombres de las clases controlador configurando la propiedad [[yii\base\Module::controllerNamespace]]. En el caso que alguno de los controladores esté fuera del espacio de nombres, se puede hacer acesible configurando la propiedad [[yii\base\Module::controllerMap]], similar a [como se hace en una aplicación](structure-applications.md#controller-map). + +### Vistas en Módulos + +Las vistas en un módulo deben deben alojarse en el directorio ‘views’ dentro del módulo del [[yii\base\Module::basePath|base path]]. Las vistas interpretadas por un controlador en el módulo, deben alojarse en el directorio ‘views/ControllerID’, donde el ‘ControllerID’ hace referencia al [identificador del controlador](structure-controllers.md#routes). Por ejemplo, si la clase controlador es ‘PostController’, el directorio sería ‘views/post’ dentro del [[yii\base\Module::basePath|base path]] del módulo. + +Un modulo puede especificar un [layout](structure-views.md#layouts) que se aplica a las vistas interpretadas por los controladores del módulo. El layout debe alojarse en el directorio ‘views/layouts’ por defecto, y se puede configurar la propiedad [[yii\base\Module::layout]] para apuntar al nombre del layout. Si no se configura la propiedad ‘layout’, se usar el layout de la aplicación. + +## Uso de los Módulos + +Para usar un módulo en una aplicación, simplemente se tiene que configurar la aplicación añadiendo el módulo en la propiedad [[yii\base\Application::modules|modules]] de la aplicación. El siguiente ejemplo de la [configuración de la aplicación](structure-applications.md#application-configurations) usa el modelo ‘forum’: + +```php +[ + 'modules' => [ + 'forum' => [ + 'class' => 'app\modules\forum\Module', + // ... otras configuraciones para el módulo ... + ], + ], +] +``` + +La propiedad [[yii\base\Application::modules|modules]] contiene un array de configuraciones de módulo. Cada clave del array representa un *identificador de módulo* que identifica de forma única el módulo de entre todos los módulos de la aplicación, y el correspondiente valor del array es la [configuración](concept-configurations.md) para crear el módulo. + +### Rutas + +De Igual manera que el acceso a los controladores en una aplicacion, las [rutas](structure-controllers.md#routes) se utiliza para dirigirse a los controladores en un módulo. Una ruta para un controlador dentro de un módulo debe empezar con el identificador del módulo seguido por el identificador del controlador y el identificador de la acción. Por ejemplo, si una aplicación usa un módulo llamado ‘forum’, la ruta ‘forum/post/index’ representaría la acción ‘index’ del controlador ‘post’ en el módulo. Si la ruta sólo contiene el identificador del módulo, entonces la propiedad [[yii\base\Module::defaultRoute]] que por defecto es ‘default’, determinara que controlador/acción debe usarse. Esto significa que la ruta ‘forum’ representaría el controlador ‘default’ en el módulo ‘forum’. + +### Acceder a los Módulos + +Dentro de un módulo, se puede necesitar obtener la instancia de la [clase módulo](#module-classes) para poder acceder al identificador del módulo, componentes del módulo, etc. Se puede hacer usando la siguiente declaración: + +```php +$module = MyModuleClass::getInstance(); +``` + +donde ‘MyModuleClass’ hace referencia al nombre de la clase módulo en la que estemos interesados. El método ‘getInstance()’ devolverá la instancia actualmente solicitada de la clase módulo. Si no se solicita el módulo, el método devolverá nulo. Hay que tener en cuenta que si se crea una nueva instancia del módulo, esta será diferente a la creada por Yii en respuesta a la solicitud. + +>Info: Cuando se desarrolla un módulo, no se debe dar por sentado que el módulo usará un identificador fijo. Esto se debe a que un módulo puede asociarse a un identificador arbitrario cuando se usa en una aplicación o dentro de otro módulo. Para obtener el identificador del módulo, primero se debe usar el código del anterior ejemplo para obtener la instancia y luego el identificador mediante ‘$modeule->id’. + +También se puede acceder a la instancia de un módulo usando las siguientes declaraciones: + +```php +// obtiene el modulo hijo cuyo identificador es “forum” +$module = \Yii::$app->getModule('forum'); + +// obtiene el módulo al que pertenece la petición actual +$module = \Yii::$app->controller->module; +``` + +El primer ejemplo sólo es útil cuando conocemos el identificador del módulo, mientras que el segundo es mejor usarlo cuando conocemos los controladores que se están solicitando. + +Una vez obtenida la instancia del módulo, se puede acceder a parámetros o componentes registrados con el módulo. Por ejemplo: + +```php +$maxPostCount = $module->params['maxPostCount']; +``` + +### Bootstrapping Módulos + +Puede darse el caso en que necesitemos que un módulo se ejecute en cada petición. El módulo [[yii\debug\Module|debug]] es un ejemplo. Para hacerlo, tenemos que listar los identificadores de los módulos en la propiedad [[yii\base\Application::bootstrap|bootstrap]] de la aplicación. + +Por ejemplo, la siguiente configuración de aplicación se asegura de que el módulo ‘debug’ siempre se cargue: + +```php +[ + 'bootstrap' => [ + 'debug', + ], + + 'modules' => [ + 'debug' => 'yii\debug\Module', + ], +] +``` + +## Módulos anidados + +Los módulos pueden ser anidados sin límite de niveles. Es decir, un módulo puede contener un módulo y éste a la vez contener otro módulo. Nombramos *padre* al primero mientras que al segundo lo nombramos *hijo*. Los módulos hijo se tienen que declarar en la propiedad [[yii\base\Module::modules|modules]] de sus módulos padre. Por ejemplo: + +```php +namespace app\modules\forum; + +class Module extends \yii\base\Module +{ + public function init() + { + parent::init(); + + $this->modules = [ + 'admin' => [ + // debe considerarse usar un nombre de espacios más corto! + 'class' => 'app\modules\forum\modules\admin\Module', + ], + ]; + } +} +``` + +En un controlador dentro de un módulo anidado, la ruta debe incluir el identificador de todos los módulos antecesores. Por ejemplo, la ruta ‘forum/admin/dashboard/index’ representa la acción ‘index’ del controlador ‘dashboard’ en el módulo ‘admin’ que es el módulo hijo del módulo ‘forum’. + +>Info: El método [[yii\base\Module::getModule()|getModule()]] sólo devuelve el módulo hijo que pertenece directamente a su padre. La propiedad [[yii\base\Application::loadedModules]] contiene una lista de los módulos cargados, incluyendo los hijos directos y los anidados, indexados por sus nombres de clase. + +## Mejores Prácticas + +Es mejor usar los módulos en grandes aplicaciones en las que sus funcionalidades puedan ser divididas en diferentes grupos, cada uno compuesto por funcionalidades directamente relacionadas. Cada grupo de funcionalidades se puede desarrollar como un módulo que puede ser desarrollado y mantenido por un programador o equipo específico. + +Los módulos también son una buena manera de reutilizar código a nivel de grupo de funcionalidades. Algunas funcionalidades de uso común, tales como la gestión de usuarios o la gestión de comentarios, pueden ser desarrollados como módulos para que puedan ser fácilmente reutilizados en futuros proyectos. +