{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
{% set titleFinal = 'xxx' %}
{% set descFinal = 'xxx' %}
{% if currentPath == '/es/home/' %}
{% set titleFinal = 'xxx' %}
{% set descFinal = 'xxx' %}
{% endif %}
{% if 'hola' in currentPath %}
{% set titleFinal = 'xxx' %}
{% set descFinal = 'xxx' %}
{% endif %}
Mostrando entradas con la etiqueta Silex. Mostrar todas las entradas
Mostrando entradas con la etiqueta Silex. Mostrar todas las entradas
Silex: Title y description de cada página
En el twig del header.twig:
silex: enviar correo
en index.php:
en contactoController.php:
$app->register(new Silex\Provider\SwiftmailerServiceProvider());
$app['swiftmailer.options'] = array(
'host' => 'smtp.1and1.com',
'port' => '25',
'username' => 'pruebaenvio@midominio.com',
'password' => 'xxx',
'encryption' => "",
'auth_mode' => null
);
en contactoController.php:
$message = \Swift_Message::newInstance()
->setSubject('Un usuario ha contactado en la web')
->setFrom(array('pruebaenvio@midominio.com'))
->setTo(array('destinoprueba@gmail.com'))
->setBody('Nombre: ' . $data['nombre'] . '<br>' . $data['email'] . '<br>' . $data['mensaje'], 'text/html');
$app['mailer']->send($message);
silex: Idiomas
index.php:
FormAddCompra.twig:
En public/locales/es.yml: (no hace falta comillas ni nada)
En public/locales/en.yml: (no hace falta comillas ni nada)
Para llamarlo desde un twig:
Forzar desde el controller un idioma (aunque no es habitual):
use Symfony\Component\Translation\Loader\YamlFileLoader;
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale_fallbacks' => array('es','en','fr', 'pt'),
));
$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
$translator->addLoader('yaml', new YamlFileLoader());
$translator->addResource('yaml', __DIR__.'/locales/es.yml', 'es');
$translator->addResource('yaml', __DIR__.'/locales/en.yml', 'en');
$translator->addResource('yaml', __DIR__.'/locales/fr.yml', 'fr');
$translator->addResource('yaml', __DIR__.'/locales/pt.yml', 'pt');
return $translator;
}));
$app->match('/{_locale}/form_add_compra', 'diclases\CUsuarios::formAddCompra')
->bind('form_add_compra');
FormAddCompra.twig:
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'en'})) }}">Ing</a>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Fran</a>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'pt'})) }}">Port</a>
{% if (app.request.locale == "es") %}
...
{% endif %}
En public/locales/es.yml: (no hace falta comillas ni nada)
lunes: lunes
martes: martes
miercoles: miércoles
jueves: jueves
mensaje: Bienvenido a mi página web
En public/locales/en.yml: (no hace falta comillas ni nada)
lunes: monday
martes: tuesday
miercoles: Wednesday
jueves: Thursday
mensaje: Welcome my site web
Para llamarlo desde un twig:
{{'mensaje'|trans}}
Forzar desde el controller un idioma (aunque no es habitual):
$app['locale'] = "fr";
Silex: URL Amigables
http://localhost:82/websilex/miweb/public/en-un-lugar-de-la-mancha-de-cuyo-nombre-no-quiero-acordarme
$app->get('/{urlAmigable}', function (Silex\Application $app, $urlAmigable) {
$sql = "select * from noticias where urlAmigable = '".$urlAmigable."'";
$arrNot = $app['db']->fetchAll($sql, array());
return $arrNot[0]["texto"];
});
Silex: Varios
// rutas para todas las imágenes, JS, CSS, etc
{{app.request.basepath}}
Ej: <link href="{{app.request.basepath}}/css/miestilo.css" rel="stylesheet">
// Retornar a la web de la que viene y borre la caché (caso formularios)
return $app->redirect($request->getRequestUri(), 303);
// Recoger parámetros directamente en la vista:
{{ app.request.get('id_group') }}
// Volver desde una vista a la vista de la que viene
{{ app.request.headers.get('referer') }}
Silex: Crear clases de controladores
Paralelamente a las carpetas de admin, config y public crear una carpeta llamada clases y crear un fichero CAll.php:
Y en CUsuarios:
require_once("CUsuarios.php");
require_once("CVideos.php");
...
Crear el fichero CUsuarios.php:
namespace diclases;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
class CUsuarios {
var $app;
function __construct() {
}
// *********************************
function getArrUsuarios(Application $app) { // para q sea llamado desde otras clases
$sql = "SELECT * from users where activo = 1 order by username";
$arrUser = $app['db']->fetchAll($sql, array());
return $arrUser;
}
// *********************************
function getUsuarios(Application $app) {
$arrUser = self::getArrUsuarios($app);
return $app['twig']->render('templateComun.twig', array(
"titular" => "Listado de Usuarios",
"template" => "listUsuarios.twig",
"arrUser" => $arrUser
));
}
}
En public/index.php:
require_once __DIR__ . '/../clases/CAll.php';
...
$app->match('/{_locale}/form_add_compra', 'diclases\CUsuarios::formAddCompra')
->bind('form_add_compra');
Si alguna función necesitase pasar algún parámetro sería:
$app->match('/list_movim_usuario/{id}/', 'diclases\CUsuarios::getListMovimientos')
->bind('list_movim_usuario');
Y en CUsuarios:
// ***********************************
function getListMovimientos(Application $app, $id) {
...
}
Silex: Eliminar el mensaje de Redirecting
vendor/symfony/http-foundation/RedirectResponse.php:
Cambiar
Redirecting to <a href="%1$s">%1$s</a>.
Por
<!-- Redirecting to <a href="%1$s">%1$s</a>. -->
Cambiar
Redirecting to <a href="%1$s">%1$s</a>.
Por
<!-- Redirecting to <a href="%1$s">%1$s</a>. -->
Silex: Upload
SUBIR VARIOS FICHEROS:
prueba.twig:
Cxxx.php:
SUBIR UNO SOLO
prueba.twig:
Cxxx.php:
prueba.twig:
<input type="file" multiple name="imagenAux[]" value="Imagen del banner">
Cxxx.php:
$imagen = "";
$file = $request->files->get('imagenAux');
foreach ($file as $clave=>$valor) {
if ($valor != NULL) {
$azar = rand(1,9999);
$valor->move($ruta."/../public/images/banners/", $azar."_".$valor->getClientOriginalName());
$imagen = $azar."_".$valor->getClientOriginalName();
}
}
SUBIR UNO SOLO
prueba.twig:
<input type="file" name="imagenAux" value="Imagen del banner">
Cxxx.php:
$imagen = "";
$file = $request->files->get('imagenAux');
if ($file != NULL) {
$azar = rand(1,9999);
$file->move($ruta."/../public/images/banners/", $azar."_".$file->getClientOriginalName());
$imagen = $azar."_".$file->getClientOriginalName();
}
Silex: Codificar contraseña
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
function postCodificarPW(Application $app) {
$encoder = new MessageDigestPasswordEncoder();
$pw_encoded = $encoder->encodePassword($_POST["pw"], '');
return "La cadena ".$_POST["pw"]." codificada es:<br>".$pw_encoded;
}
Silex: Instalación desde cero en NetBeans
a) Descargar de http://silex.sensiolabs.org/download el FAT y descomprimirlo.
b) Copiarlo en donde quieras el proyecto (ej: c:\wamp\www\silex_new)
c) En NetBean con el botón derecho apuntar al nombre del proyecto (silex_new) y darle a composer -> update no dev, y te hará toda la instalación (incluido el doctrine)
NOTA: Si una vez ya hecha la página queremos añadir un nuevo módulo que nos faltaba solo hay que modificar el fichero: composer.json añadiendo el módulo que queramos, por ejemplo:
"symfony/translation": "~2.3",
Y darle a botón derecho -> composer -> update no dev, y te añade el nuevo módulo para que funcione (te lo añade a la carpeta Vendor por lo que habrá que volver a subir esa carpeta al servidor)
d) Crear una carpeta llamada views dentro de web.
e) Crear un .htaccess en la carpeta web:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
#RewriteBase /path/to/app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
f) Editar el index.php para empezar a añadir tus URL amigables:
$app = new Silex\Application();
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
));
$app->get('/', function () {
return 'Bienvenido to the homepage';
})
->bind('homepage');
Para ejecutarlo: http://localhost:82/silex_new/web/
g) Ejemplo con una vista creada por ti, por eje,plo crear views/hola.twig:
hola mundo, bienvenido {{ nombre }}
Y en el index el controller sería:
$app->get('/hola/{nombre}', function ($nombre) use ($app) {
return $app['twig']->render('hola.twig', array(
'nombre' => $nombre,
));
})
->bind('hola');
Para ejecutarlo: http://localhost:82/silex_new/web/hola/Pepe
h) Crear barra de navegación para una web:
crear menu.twig:
En el index:
estilo.css se guarda en la carpeta web:
b) Copiarlo en donde quieras el proyecto (ej: c:\wamp\www\silex_new)
c) En NetBean con el botón derecho apuntar al nombre del proyecto (silex_new) y darle a composer -> update no dev, y te hará toda la instalación (incluido el doctrine)
NOTA: Si una vez ya hecha la página queremos añadir un nuevo módulo que nos faltaba solo hay que modificar el fichero: composer.json añadiendo el módulo que queramos, por ejemplo:
"symfony/translation": "~2.3",
Y darle a botón derecho -> composer -> update no dev, y te añade el nuevo módulo para que funcione (te lo añade a la carpeta Vendor por lo que habrá que volver a subir esa carpeta al servidor)
d) Crear una carpeta llamada views dentro de web.
e) Crear un .htaccess en la carpeta web:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
#RewriteBase /path/to/app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
f) Editar el index.php para empezar a añadir tus URL amigables:
$app = new Silex\Application();
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
));
$app->get('/', function () {
return 'Bienvenido to the homepage';
})
->bind('homepage');
Para ejecutarlo: http://localhost:82/silex_new/web/
g) Ejemplo con una vista creada por ti, por eje,plo crear views/hola.twig:
hola mundo, bienvenido {{ nombre }}
Y en el index el controller sería:
$app->get('/hola/{nombre}', function ($nombre) use ($app) {
return $app['twig']->render('hola.twig', array(
'nombre' => $nombre,
));
})
->bind('hola');
Para ejecutarlo: http://localhost:82/silex_new/web/hola/Pepe
h) Crear barra de navegación para una web:
crear menu.twig:
<head>
<link rel="stylesheet" type="text/css" href="{{ app.request.basepath }}/css/estilo.css">
</head>
{% set route = app.request.attributes.get('_route') %}
<ul>
<li><a {% if route == 'inicio'%} class="active" {%endif%} href="{{ path('inicio') }}">Inicio</a></li>
<li><a {% if route == 'hola'%} class="active" {%endif%} href="{{ path('hola', {nombre: 'Leandro'}) }}">Hola mundo</a></li>
</ul>
En el index:
$app->get('/', function () use ($app) {
// return 'Bienvenido, estás en la página principal de esta página. Disfrútala';
return $app['twig']->render('inicio.twig');
})
->bind('inicio');
$app->get('/hola/{nombre}', function ($nombre) use ($app) {
return $app['twig']->render('hola.twig', array(
'nombre' => $nombre
));
})
->bind('hola');
estilo.css se guarda en la carpeta web:
li { display:inline-block; }
.active { font-weight:bold; color:red; }
Silex: Instalación en el servidor
a) Con WinSCP -> Administrar -> Abrir con Putty -> Entrar en el SSL del servidor
b) Si no está instalado el composer:
b) Si no está instalado el composer:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
c) Instalar el Silex:
composer create-project fabpot/silex-skeleton mi_proyecto/ 1.1.0
SILEX: Crud básico
Descargar Silex skeleton desde la consola:
Instalar doctrine en el silex:
http://cazaresluis.com/silex-doctrine/
Crear en la carpeta web un htaccess con este texto:
controllers.php:
formAddConsulta.html.twig:
formDelConsulta.html.twig:
formModConsulta.html.twig:
listConsultas.html.twig:
composer create-project fabpot/silex-skeleton mi_proyecto/ 1.1.0
Instalar doctrine en el silex:
http://cazaresluis.com/silex-doctrine/
Crear en la carpeta web un htaccess con este texto:
<IfModule mod_rewrite.c> RewriteEngine On #<IfModule mod_vhost_alias.c> # RewriteBase / #</IfModule> RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
controllers.php:
<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_mysql',
'dbname' => 'mibasededatos',
'host' => 'localhost',
'user' => 'root',
'password' => '',
'charset' => 'utf8',
// Conexión en servidores locales por ejemplo MAMP
// 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock'
)
));
$app->get('/blog/{id}', function ($id) use ($app) {
$sql = "SELECT * FROM consultas WHERE id = ?";
$post = $app['db']->fetchAssoc($sql, array((int) $id));
// $sql = "UPDATE consultas SET value = ? WHERE id = ?";
// $app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id));
return "<h1>{$post['consulta']}</h1>";
});
$app->get('/insertBlog/{email}/{consulta}', function ($email,$consulta) use ($app) {
$sql = "insert into consultas(email,consulta) values (?,?)";
$app['db']->executeUpdate($sql,
array($email,$consulta)
);
return true;
});
$app->get('/updateBlog/{id}', function ($id) use ($app) {
$sql = "UPDATE consultas SET consulta = ? WHERE id = ?";
$app['db']->executeUpdate($sql, array('newValue', (int) $id));
return true;
});
// ************** LISTAR CONSULTAS
$app->get('/listConsultas/', function () use ($app) {
$sql = "SELECT * FROM consultas";
$arrConsultas = $app['db']->fetchAll($sql, array());
return $app['twig']->render('listConsultas.html.twig',
array('arrConsultas' => $arrConsultas));
})
->bind('listConsultaspage')
;
// ************** AÑADIR CONSULTA
$app->get('/formAddConsulta/', function () use ($app) {
return $app['twig']->render('formAddConsulta.html.twig',
array());
})
->bind('formAddConsultapage')
;
$app->post('/putConsulta', function (Request $request) use ($app) {
$nombre_completo = $request->get("nombre_completo");
$email = $request->get("email");
$telefono = $request->get("telefono");
$consulta = $request->get("consulta");
$sql = "insert into consultas(nombre_completo, email, telefono, consulta) values (?,?,?,?)";
$app['db']->executeUpdate($sql,
array($nombre_completo, $email, $telefono, $consulta)
);
// listar
return ("Insertado correctamente.<br><a href='listConsultas'>Listar</a>");
})
->bind('putConsultapage')
;
// ****************** MODIFICAR CONSULTA
$app->get('/formModConsulta/{id}', function ($id) use ($app) {
$sql = "SELECT * FROM consultas where id=?";
$arrConsultas = $app['db']->fetchAssoc($sql, array((int) $id));
return $app['twig']->render('formModConsulta.html.twig',
array('arrConsultas' => $arrConsultas));
})
->bind('formModConsultapage')
;
$app->post('/putModConsulta', function (Request $request) use ($app) {
$id = $request->get("id");
$nombre_completo = $request->get("nombre_completo");
$email = $request->get("email");
$telefono = $request->get("telefono");
$consulta = $request->get("consulta");
$sql = "UPDATE consultas SET nombre_completo = ?, email = ?, telefono = ?, consulta = ? WHERE id = ?";
$app['db']->executeUpdate($sql,
array($nombre_completo, $email, $telefono, $consulta, $id)
);
// listar
return ("Modificado correctamente.<br><a href='listConsultas'>Listar</a>");
})
->bind('putModConsultapage')
;
// ************** BORRAR CONSULTA
$app->get('/delConsulta/{id}', function ($id) use ($app) {
$sql = "delete FROM consultas where id = ?";
$app['db']->executeUpdate($sql,
array($id)
);
// listar
return ("Borrado correctamente.<br><a href='../listConsultas'>Listar</a>");
})
->bind('delConsultapage')
;
?>
formAddConsulta.html.twig:
{% extends "layout.html.twig" %}
{% block content %}
<form method="post" action="../putConsulta" id="sigin" name="sigin">
Nombre completo: <input type="text" id="nombre_completo" name="nombre_completo"><br>
Email: <input type="email" id="email" name="email"><br>
Telefono: <input type="text" id="telefono" name="telefono"><br>
consulta: <input type="text" id="consulta" name="consulta"><br>
<input type="submit" value="Dar de alta">
</form>
{% endblock %}
formDelConsulta.html.twig:
{% extends "layout.html.twig" %}
{% block content %}
<form method="post" action="delConsulta" id="sigin" name="sigin">
Consulta a borrar:
<select name="id_consulta">
{% for item in arrConsultas %}
<option value="{{ item.id }}">{{ item.consulta }}</option>
{% endfor %}
</select>
<input type="submit" value="Borrar">
</form>
{% endblock %}
formModConsulta.html.twig:
{% extends "layout.html.twig" %}
{% block content %}
<h1>MODIFICAR CONSULTA</h1>
<form method="post" action="../putModConsulta" id="sigin" name="sigin">
<input type="hidden" name="id" id="id" value="{{arrConsultas.id}}">
Nombre completo: <input type="text" id="nombre_completo" name="nombre_completo" value="{{arrConsultas.nombre_completo}}"><br>
Email: <input type="email" id="email" name="email" value="{{arrConsultas.email}}"><br>
Teléfono: <input type="text" id="telefono" name="telefono" value="{{arrConsultas.telefono}}"><br>
consulta: <input type="text" id="consulta" name="consulta" value="{{arrConsultas.consulta}}"><br>
<input type="submit" value="Modificar">
</form>
{% endblock %}
listConsultas.html.twig:
{% extends "layout.html.twig" %}
{% block content %}
Consultas:
<table border="1">
<tr>
<td>NOMBRE COMPLETO</td>
<td>EMAIL</td>
<td>TELEFONO</td>
<td>CONSULTA</td>
<td colspan="2">
</td>
</tr>
{% for item in arrConsultas %}
<tr>
<td>{{ item.nombre_completo }}</td>
<td>{{ item.email }}</td>
<td>{{ item.telefono }}</td>
<td>{{ item.consulta }}</td>
<td>
<a href="../formModConsulta/{{ item.id }}">Modificar</a>
<a href="../delConsulta/{{ item.id }}">Borrar</a>
</td>
</tr>
{% endfor %}
</table>
<a href="../formAddConsulta">Añadir consulta</a>
{% endblock %}
Suscribirse a:
Entradas (Atom)
