Hola, les voy a dejar aquí mi código dinámico (el reto), para que lo puedan ver y utilizar de ejemplo o 'guía' y se les pueda facilitar de una buena manera el entendimiento del ejercicio ;)
.
Index.twig
<ul>{%for job in jobs %}<ul class="work-exp-box"><li class="row"><h4>{{ job.carrer}}</h4></li><p>{{ job.description}}</p></ul>// esto es un if para reconocer si, hay o no hay imagen en la DB.{%if job.fileName==''%}<h5>No image founded :/</h5>{%else%}<img src="uploads/{{ job.fileName}}" alt="image" style="width:120px; heigh:90px;">{% endif %}{% endfor %}</ul>
nótese que lo nuevo es que, agregue una variable "$route" para guardar la ruta de la imagen, esta se inicializa por defecto en "noImg" en caso de que no haya una imagen guardada, acto seguido en caso de que SI haya una imagen, cambio la ruta dependiendo del nombre del archivo, y más adelante guardo la ruta en el atributo img de $job, así quedó la tabla en la DB:
y de esta forma quedó en el archivo .twig principal, la ruta de la imagen:
{%for job in jobs %}<li class="work-position"><h5>{{job.title}}</h5><p>{{job.description}}</p><p>{{job.getDurationAsString()}}</p><strong>Achievements:</strong><ul><li>Lorem ipsum dolor sit amet,80% consectetuer adipiscing elit.</li><li>Lorem ipsum dolor sit amet,80% consectetuer adipiscing elit.</li><li>Lorem ipsum dolor sit amet,80% consectetuer adipiscing elit.</li></ul><img src="{{ job.img }}" alt=""></li>{% endfor %}
Solas
Agregar el atributo imagen
1-Creamos el atributo en la base de datos
2-Lo guardamos en la base de datos a través del controlador
Concateno la direccion con ~ por si cambia la ruta
agrego un condicional para evaluar si el campo tiene imagen asignada
Muy bien explicado
buen aporte!
Es muy sencillo utilizar los archivos con una función directa, sin tener que crear tantos objetos para poder manipular un solo archivo, me pareció muy bien lograda la forma de lectura de archivos para esta aplicación.
Parece ser que no se subio una clase de validadores usando la libreria respect/validation…
si eso pense cuando vi codigo que no reconocía de la clase anterior 😦
Hola buenas tardes a todos, para cumplir el reto realice lo siguiente
agregar campo para almacenar el nombre de la imagen
{ $responseMessage =null;if($request->getMethod()=='POST'){ $postData = $request->getParsedBody(); $jobValidator = v::key('title',v::stringType()->notEmpty())->key('description',v::stringType()->notEmpty());try{ $jobValidator->assert($postData); $postData = $request->getParsedBody(); $files = $request->getuploadedfiles(); $logo = $files['logo'];if($logo->getError()==UPLOAD_ERR_OK){ $filename = $logo->getClientFileName(); $logo->moveTo("uploads/$filename");} $job =newjob(); $job->title = $postData['title']; $job->description = $postData['description']; $job->logo ='public/uploads/'.$filename; $job->save(); $responseMessage ='Saved';}catch(\Exception $e){ $responseMessage = $e->getMessage();}}return $this->renderHTML('addJob.twig',['responseMessage'=> $responseMessage]);}}```
3. en el archivo index.php agregue el llamado a la imagen
<ul>
{% for job in jobs %}
<li class="work-position">
<h5>{{ job.title }}</h5>
<p> {{ job.description}}</p>
<img src = "{{job.logo}}" width="100px" height="100px">
</li>
{% endfor %}
</ul>```
Saludos
Tuve muchos problemas en esta parte del curso, precisamente porque estoy trabajando con Internet Information Services, y al parecer no tenia permiso con la carpeta temp de WINDOWS. Afortunadamente pude arreglar el problema. Apenas pueda publico la solucion.
Se mueve el archivo porque al realizarse la subida no está en el mismo directorio en el que se está trabajando
Para subir la imagen & guardarla en mi caso, guarde en la base de datos el nombre de la image. La ruta la guarde en una variable dentro del indexController.php & al final uní ambas.