ccc

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:
{% 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 %}

silex: enviar correo

en index.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:

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: 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>. -->

Silex: Upload

SUBIR VARIOS FICHEROS:

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:
<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:
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:
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 %}