-
Notifications
You must be signed in to change notification settings - Fork 0
/
controladores.htm
386 lines (339 loc) · 15.7 KB
/
controladores.htm
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=Generator content="Microsoft Word 15 (filtered)">
<link rel="stylesheet" href="css/ligne.min.css?v1.2">
<link rel="stylesheet" href="css/menu.css">
<link rel="stylesheet" href="css/code_style.css">
<script src="js/includes.js"></script>
<script src="js/rainbow-custom.min.js"></script>
<script src="js/php.js"></script>
<style>
/* Font Definitions */
* {
font-family: Verdana, sans-serif;
}
/*Estilo del codigo php*/
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin-top: 0cm;
margin-right: 0cm;
margin-bottom: 8.0pt;
margin-left: 0cm;
line-height: 1.5rem;
font-size: 14pt;
font-family: "Calibri", sans-serif;
}
pre {
mso-style-link: "HTML con formato previo Car";
margin: 0cm;
margin-bottom: .0001pt;
font-size: 10.0pt;
font-family: "Courier New";
}
ol li{
margin: 8px;
font-weight: bold;
}
</style>
</head>
<body>
<!--incluyendo la tabla de contenido lateral-->
<div class="container-fluid">
<div w3-include-html="includes/tabla_contenido.html"></div>
<!--incluyendo el menu-->
<div w3-include-html="includes/menu.html"></div>
<div class="panel bordered">
<div class="panel">
<div class="body">
<h3>Contenido</h3>
<ol>
<li><a href="#controladores" class="primary undecoration important">Controladores</a></li>
<li><a href="#acciones_controlador" class="primary undecoration important">Acciones del controlador</a></li>
<li><a href="#interactuando_vistas" class="primary undecoration important">Interactuando con Vistas</a></li>
<li><a href="#interactuar_modelos" class="primary undecoration important">Interactuar con los modelos</a></li>
<li><a href="#recibiendo_datos_get_post" class="primary undecoration important">Recibiendo datos por medio de GET y POST</a></li>
<li><a href="#control_flujo" class="primary undecoration important">Control de flujo</a></li>
</ol>
</div>
</div>
<div class="body">
<div id="controladores" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Controladores</span></b></p>
<p class=MsoNormal>Los controladores son el intermediario entre
la vista<i> (Lo que ve el usuario)</i> y el modelo <i>(Interacción con la base
de datos).</i></span></p>
<p class=MsoNormal>Los controladores proporcionan una serie de
métodos que manejan las solicitudes. Estas son llamadas de acciones. cada
método público en un controlador es una acción, y es accesible desde una URL.</p>
<p class=MsoNormal>Una acción es responsable de interpretar la
solicitud y crear la respuesta. Por lo general, las respuestas tienen la forma
de una vista renderizada, pero también hay otras formas de crear respuestas.</p>
<p class=MsoNormal>Cada controlador creado debe heredar de la
clase <b>Controller</b>, el <b>Controller </b>es la clase principal para todos
los controladores de la aplicación. Esta clase está incluida en la biblioteca
principal de Ligne.</p>
<pre>
<code data-language="php">
class tasksController extends Controller {
//Code…
}
</code>
</pre>
</div>
</div>
<div id="acciones_controlador" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Acciones
del controlador</span></b></p>
<p class=MsoNormal>Las acciones del controlador son responsables de convertir
los parámetros de solicitud en una respuesta para el usuario que realiza la
solicitud. </p>
<p class=MsoNormal>Por convención, Ligne presenta una vista con una versión
modulada del nombre de la acción. Crearemos un controlador de tareas como
ejemplo, en el crearemos las acciones <span style='background:silver'>allTack()</span>,
<span style='background:silver'>create()</span> y <span style='background:silver'>edit()</span>;</p>
<pre>
<code data-language="php">
class TasksController extends Controller //Herencia
{
public function allTask()
{
//Código
}
public function create()
{
//Código
}
public function edit($id)
{
//Código
}
}
</code>
</pre>
<p class=MsoNormal>Los archivos de vista de estas acciones serían <span
style='background:silver'>/View/Tasks/alltask.php</span>, <span
style='background:silver'>/View/Tasks/create.php</span> y <span
style='background:silver'>/View/Tasks/edit.php</span> El nombre del archivo de
vista convencional es la versión en minúscula de la acción.</p>
</div>
</div>
<div id="interactuando_vistas" class="panel bordered">
<div class="body">
<p class="MsoNormal">
<b>
<span style='font-size:16.0pt;line-height:107%'>Interactuando con Vistas</span>
</b>
</p>
<p class=MsoNormal>Los controladores interactúan con las vistas de varias
maneras. Primero, pueden pasar datos a las vistas, usando <span
style='background:silver'>setData()</span>. También puede decidir qué archivo
de vista usar desde el controlador.</p>
<p class=MsoNormal>El método <span style='background:silver'>setData() </span>es
la forma principal de enviar datos desde su controlador a su vista. Una vez que
haya usado <span style='background:silver'>setData()</span>, se puede acceder a
la variable en su vista:</p>
<pre>
<code data-language="php">
//Algun controlador
$data['date'] = "Oct 2018";
//envía datos a la vista desde el controlador
$this->setData($data);
</code>
</pre>
<pre>
<code data-language="php">
//Accediendo a los datos en la vista
La fecha es: <strong><?= $date ?></strong>
</code>
</pre>
<p class=MsoNormal>El método <span style='background:silver'>setData()</span> también
toma una matriz asociativa como su primer parámetro. A menudo, esto puede ser
una forma rápida de asignar un conjunto de información a la vista.</p>
<p class=MsoNormal>El método <span style='background:silver'>render()</span> se
llama al final de cada acción del controlador. Este método realiza toda la
lógica de la vista (utilizando los datos que ha enviado utilizando el método <span
style='background:silver'>setData()</span>), coloca la vista dentro del mismo layout.</p>
<pre>
<code data-language="php">
public function edit()
{
$data['tasks'] = $tasks->showAllTasks();
//envia datos a la vista
$this->setData($data);
//Renderiza la vista
$this->render("index");
}
</code>
</pre>
<p class=MsoNormal>
El método <span style='background:silver'>render()</span> admite un segundo
parámetro el cual es utilizado para establecer el título de la página;</p>
<pre>
<code data-language="php">
$this->render("index",'Index Page'); //Renderiza la vista con un titulo
</code>
</pre>
<p class=MsoNormal>
Este habitualmente se coloca en la etiqueta <title> de html en el layout</p>
<pre>
<code data-language="php">
<title><?= $page_title ?></title>
</code>
</pre>
<p class=MsoNormal>
Otras acciones que puede ejecutar este método es renderizar archivos de vistas de otros controladores o si tiene su proyecto por separado puedes cargar el head, body y footer por separado.
</p>
<pre>
<code data-language="php">
$this->render('layout/head',null,true);
$this->render('layout/body',null,true);
$this->render('layout/footer',null,true);
</code>
</pre>
<p class=MsoNormal>
Note que se ha especificado una ruta dentro del directorio <code>views</code> y el archivo que queremos cargar, pasamos el título de la página como <code>null</code> y un tercer parámetro como <code>true</code>, este último le indica a render que debe cargar un archivo de vista externo.
</p>
</div>
</div>
<div id="interactuar_modelos" class="panel bordered">
<div class="body">
<div>
<p class=MsoNormal>
<b>
<span style='font-size:16.0pt;line-height:107%'>Interactuar con los modelos</span>
</b>
</div>
Por convicción los modelos se añaden a los controladores en la cabecera de las clases controladoras utilizando la palabra reservada <span style='background:silver'>use</span>;</p>
<pre>
<code data-language="php">
use Models\Tasks\Task;
class TasksController extends Controller
{
//code...
}</code>
</pre>
<p class=MsoNormal>Inmediatamente haga uso del modelo, podrá realizar instancias de la clase, si no se realiza esto y se instancia una clase no incluida en la cabecera, resultara en un error fatal que detendrá la ejecución de su programa.
Note que el <span style='background:silver'>use</span> es el <span style='background:silver'>namespace</span> de su clase.
Los modelos se utilizarán siempre que sea necesaria la extracción de datos de la base de datos.
</p>
</div>
</div>
<div id="recibiendo_datos_get_post" class="panel bordered">
<div class="body">
<h2>Recibiendo datos por medio de GET y POST</h2>
<p class="MsoNormal">
Las acciones pueden recibir parámetros tanto por <span style='background:silver'>GET</span> como por <span style='background:silver'>POST</span> y gracias al complemento <span style='background:silver'>HttpFoundation</span> podremos realizar una gran cantidad de tareas con un menor esfuerzo;
</p>
<h3>GET</h3>
<p class="MsoNormal">
Tomaremos la acción (metodo) <span style='background:silver'>edit</span> como ejemplo, supongamos que el usuario ingreso a la vista de edición de una tarea con el ID 3, una URL válida para esto sería la siguiente <div class="panel">
<div class="body MsoNormal">
<span style='background:silver'>http://localhost/taskapp/ tasks/edit/3</span>
</div>
</div>
<div>
<pre>
<code data-language="php">
public function edit($id)
{
$task = new TaskModel();
// Alguna logica
$data = $task->getTask($id); //$id = 3
//envia datos a la vista
$this->setData($data);
//Renderiza la vista
$this->render("edit");
}
</code>
</pre>
</div>
</p>
<div>
<h3>POST</h3>
<p class="MsoNormal">
Ahora suponemos que el usuario realizo las ediciones de la tarea y envió estos datos por medio de <span style='background:silver'>POST</span>, es aquí donde entra en juego el componente <span style='background:silver'>HttpFoundation</span>;
</p>
<p class="MsoNormal">
Supondremos que los datos fueron enviados a una acción (método) nombrado <span style='background:silver'>updateTask</span> el cual procesara la solicitud del usuario.
</p>
<pre>
<code data-language="php">
public function updateTask()
{
$request = $this->easy_request();
//Nos aseguramos que la petición realmente provenga por POST
if($request->server->get('REQUEST_METHOD') == 'POST'){
$task = new TaskModel();
//Obteniendo los datos que provienen del metodo POST
$data = [
'task_id'=> $request->request->get('task_id'),
'description' => $request->request->get('description')
];
$task->update($data);
//Algo de logica
}
}
</code>
</pre>
</div>
</div>
</div>
<div id="control_flujo" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Control
de flujo</span></b></p>
<p class=MsoNormal>El método de control de flujo que usarás más a menudo es <span
style='background:silver'>redirect()</span>. Este método toma su primer
parámetro en forma de una URL relativa a Ligne. Cuando un usuario ha realizado
un pedido con éxito, es posible que desee redirigirlos a una pantalla de éxito.</p>
<pre>
<code data-language="php">
public function create()
{
$task= new Task();
$request = $this->easy_request();
$title = $request->request->get('title');
$description = $request->request->get('description');
$task -> create( $title, $description);
//Llevaremos el usuario hacia el index luego de creada la tarea
$this -> redirect(array( 'controller'=>'tasks','action'=>'index' ) );
}
</code>
</pre>
<p class=MsoNormal>También se puede rediccionar pasando parámetros por la URL, por ejemplo:</p>
<pre>
<code data-language="php">
$this->redirect( array('controller'=>'tasks','action'=>'view'),$id );
</code>
</pre>
<p class="MsoNormal">
Esto nos lleva a la siguiente URL <span style='background:silver'> http://localhost/tasks/view/3 </span>
</p>
<p class=MsoNormal>El Segundo parámetro que <span style='background:silver'>redirect()</span>
admite es un parámetro para la url enviada.</p>
<p class=MsoNormal>
También puede usar una URL relativa o absoluta
</p>
<pre>
<code data-language="php">
$this->redirect ( '/ tasks / index' );
$this->redirect ( 'http://www.github.com' );
</code>
</pre>
<p class=MsoNormal> </p>
</div>
</div>
</div>
</div>
<!--incluyendo el pie de pagina-->
<div w3-include-html="includes/pie_pagina.html"></div>
<script>
includeHTML();
</script>
<!--incluyendo el pie de pagina-->
</div>
</body>
</html>