-
Notifications
You must be signed in to change notification settings - Fork 55
/
yaf-loader.xml
304 lines (264 loc) · 9.36 KB
/
yaf-loader.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<reference xml:id="class.yaf-loader" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>La clase Yaf_Loader</title>
<titleabbrev>Yaf_Loader</titleabbrev>
<partintro>
<!-- {{{ Yaf_Loader intro -->
<section xml:id="yaf-loader.intro">
&reftitle.intro;
<para>
<classname>Yaf_Loader</classname> introduce una solución completa de
autocarga para Yaf.
</para>
<para>
La primera vez que se recupera una instancia de la clase <classname>Yaf_Application</classname>,
<classname>Yaf_Loader</classname> instanciará un singleton, y se registrará a sí mismo con
spl_autoload. Se recupera una instancia usando el método <methodname>Yaf_Loader::getInstance</methodname>
</para>
<para>
<classname>Yaf_Loader</classname> intenta cargar una clase sólo una vez, y si
falla, dependiendo de <link
linkend="ini.yaf.use-spl-autoload">yaf.use_spl_auload</link>, si esta configuración
es "On" <methodname>Yaf_Loader::autoload</methodname> devolverá
&false;, y así dará otra oportunidad a otra función de autocarga; si es "Off"
(por omisión), <methodname>Yaf_Loader::autoload</methodname> devolverá
&true;, y lo que es más importante: emitirá una advertencia muy útil
(muy útil para averiguar por qué no se cargó una clase).
<note>
<para>
Por favor, mantenga yaf.use_spl_autoload en "Off" a menos que exista una biblioteca que
tenga su propio mecanismo de autocarga y sea imposible reescribirlo.
</para>
</note>
</para>
<para>
Por defecto, <classname>Yaf_Loader</classname> asume que todas las bibliotecas (las clases
definidas en el script) se almacenan en el <link linkend="ini.yaf.library">directorio de clases
global</link>, el cual está definido en php.ini (yaf.library).
</para>
<para>
Si quiere que <classname>Yaf_Loader</classname> busque algunas
clases (bibliotecas) en el <link linkend="yaf-loader.props.library">directorio de
clases local</link> (el cual está definido en application.ini, y por omisión
es <link
linkend="configuration.yaf.directory">application.directory</link> . "/libraray"),
debería registrar el prefijo de clases usando el método
<methodname>Yaf_Loader::registerLocalNameSpace</methodname>
</para>
<para>
Veamos algunos ejemplos (asumiendo que APPLICATION_PATH es <link
linkend="configuration.yaf.directory">application.directory</link>):
<example>
<title>Ejemplo de configuración</title>
<programlisting role="shell">
<![CDATA[
// Se asume la siguiente configuración en php.ini:
yaf.library = "/global_dir"
// Se asume la siguiente configuración en application.ini
application.library = APPLICATION_PATH "/library"
]]>
</programlisting>
</example>
Se asume que el siguiente espacio de nombres local está registrado:
<example>
<title>Registrar el espacio de nombres local</title>
<programlisting role="php">
<![CDATA[
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
]]>
</programlisting>
</example>
Ahora los ejemplos de autocarga:
<example>
<title>Load class example</title>
<programlisting role="shell">
<![CDATA[
class Foo_Bar_Test =>
// APPLICATION_PATH/library/Foo/Bar/Test.php
class GLO_Name =>
// /global_dir/Glo/Name.php
class BarNon_Test
// /global_dir/Barnon/Test.php
]]>
</programlisting>
</example>
<example>
<title>Ejemplo de carga de una clase en el espacio de nombres</title>
<programlisting role="shell">
<![CDATA[
class \Foo\Bar\Dummy =>
// APPLICATION_PATH/library/Foo/Bar/Dummy.php
class \FooBar\Bar\Dummy =>
// /global_dir/FooBar/Bar/Dummy.php
]]>
</programlisting>
</example>
</para>
<para>
Se puede observar que todas las carpetas tienen la primera letra en mayúsculas, se pueden ponerlas
en minúsculas estableciendo <link linkend="ini.yaf.lowcase-path">yaf.lowcase_path</link> = On en php.ini
</para>
<para>
<classname>Yaf_Loader</classname> también está diseñada para cargar las clases MVC,
y la regla es:
<example>
<title>Ejemplo de carga de clase MVC</title>
<programlisting role="shell">
<![CDATA[
Controller Classes =>
// APPLICATION_PATH/controllers/
Model Classes =>
// APPLICATION_PATH/models/
Plugin Classes =>
// APPLICATION_PATH/plugins/
]]>
</programlisting>
</example>
Yaf identifica un sufijo de clases (por omisión, se puede cambiar
el sufijo cambiando la opción de configuración <link
linkend="ini.yaf.name-suffix">yaf.name_suffix</link>) para decidir si
es una clase MVC:
<example>
<title>Distinciones de clases MVC</title>
<programlisting role="shell">
<![CDATA[
Controller Classes =>
// ***Controller
Model Classes =>
// ***Model
Plugin Classes =>
// ***Plugin
]]>
</programlisting>
</example>
algunos ejemplos:
<example>
<title>Ejemplo de carga MVC</title>
<programlisting role="shell">
<![CDATA[
class IndexController
// APPLICATION_PATH/controllers/Index.php
class DataModel =>
// APPLICATION_PATH/models/Data.php
class DummyPlugin =>
// APPLICATION_PATH/plugins/Dummy.php
class A_B_TestModel =>
// APPLICATION_PATH/models/A/B/Test.php
]]>
</programlisting>
</example>
<note>
<para>
A partir de 2.1.18, Yaf admite que los Controllers se autocarguen para el lado del scrpt cliente,
(lo que significa que la autocarga se desencadena por el script del usuario de php, p.ej., acceder a una
propiedad de un Controller estático en Bootstrap o Plugins),
aunque el autocargador solamente intenta localizar el controlador bajo la carpeta del
módulo predeterminado, que es "APPLICATION_PATH/controllers/".
</para>
</note>
también, el directorio será afectado por <link linkend="ini.yaf.lowcase-path">yaf.lowcase_path</link>.
</para>
</section>
<!-- }}} -->
<section xml:id="yaf-loader.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass><classname>Yaf_Loader</classname></ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>Yaf_Loader</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Properties;</classsynopsisinfo>
<fieldsynopsis>
<modifier>protected</modifier>
<varname linkend="yaf-loader.props.local-ns">_local_ns</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>protected</modifier>
<varname linkend="yaf-loader.props.library">_library</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>protected</modifier>
<varname linkend="yaf-loader.props.global-library">_global_library</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>static</modifier>
<varname linkend="yaf-loader.props.instance">_instance</varname>
</fieldsynopsis>
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-loader')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-loader')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ Yaf_Loader properties -->
<section xml:id="yaf-loader.props">
&reftitle.properties;
<variablelist>
<varlistentry xml:id="yaf-loader.props.local-ns">
<term><varname>_local_ns</varname></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
<varlistentry xml:id="yaf-loader.props.library">
<term><varname>_library</varname></term>
<listitem>
<para>
Por omisión, este valor es <link
linkend="configuration.yaf.directory">application.directory</link> . "/library",
se puede cambiar en application.ini (application.library) o llamando al método
<methodname>Yaf_Loader::setLibraryPath</methodname>
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="yaf-loader.props.global-library">
<term><varname>_global_library</varname></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
<varlistentry xml:id="yaf-loader.props.instance">
<term><varname>_instance</varname></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- }}} -->
</partintro>
&reference.yaf.entities.yaf-loader;
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->