En este post voy a explicar como hacer una función que bloquea ips de robots o simples usuarios spammers. Para esto mezclaremos la utilización de archivos de configuración donde iremos registrando en un array las ips que queremos bloquear. Lo primero es crear un archivo de configuración que podrá ser utilizado desde cualquier parte de la aplicación. En este archivo de configuración crearemos una variable que contendrá un array con registros de ips. /app/config/ip_block.php <?php $config['Ip']['block'] = array(‘xxx.xxx.xxx.xxx’); ?> Esta funcionalidad es ideal para ir insertando las ips manualmente, previo análisis. A continuación la función con la lógica que procesa la ip y las busca en el array de ips bloqueadas que hemos definido anteriormente en el archivo de configuración. lo ideal será colocarla en /app/controllers/app_controller.php <? class AppController extends Controller { function __construct() { parent::__construct(); } /** * funcion para bloquear ips. * Esta funcion se puede llamar desde cualquier funcion/controlador para comprobar si una ip está bloqueada. * Las ips bloqueadas se guardan en un array en /app/config/ip_block.php * La funcion simplemente carga el archivo de configuración y le las ips que hay registradas y las comprueba con la ip que enviamos * Si la ip coincide redirigimos [...]
En este post voy a comentar lo que he hecho para crear archivos PDF con CakePHP. Los ingredientes para esta “receta” son: 1.- La librería TCPDF que se encarga de generar los archivos PDF. 2.- Un layout 3.- Una vista Para implementar esta funcionalidad en vuestro desarrollo en CakePHP es muy sencillo y da muy buenos resultados. Tendréis que descargar la última versión de la librería TCPDF que como he dicho es la encargada de generar los documentos PDF. Tendréis que crear la carpeta app/vendors/tcpdf y extraer los ficheros en esta ruta. Al menos necesitareis copiar el archivo tcpdf.php y las carpetas tcpdf/config y tcpdf/fonts. Por defecto la librería TCPDF crea unas cabeceras y pie definidas en los métodos header() y footer(), lo que hacemos es sobrescribir estos métodos creando una clase en app/vendors/tcpdf que extienda las propiedades y métodos de la librería TCPDF. Para ello creamos el archivo app/vendors/tcpdf/xtcpdf.php <?php App::import(‘Vendor’,'tcpdf/tcpdf’); class XTCPDF extends TCPDF { var $xheadertext = ‘PDF creado using CakePHP y TCPDF’; var $xheadercolor = array(0,0,200); var $xfootertext = ‘Copyright © %d XXXXXXXXXXX. All rights reserved.’; var $xfooterfont = PDF_FONT_NAME_MAIN ; var $xfooterfontsize = 8 ; function Header() { list($r, $b, $g) = $this->xheadercolor; $this->setY(10); $this->SetFillColor($r, [...]
Me he encontrando en la web oficial de CakePHP este genial esquema que representa una petición estandar en el sistema de este Framework y el funcionamiento interno. Haz click en la imagen para verla a tamaño completo. Los elementos sombreados en negro son obligatarios, los que estan sombreados en gris son opcionales. Los azules son callbacks. Esto viene muy bien explicado en el ejemplo original, pero lo voy a traducir al español manteniendo el sentido original. Ricardo visita el link http://www.example.com/cakes/buy, y su navegador hace una petición al servidor web. El Enrutador de CakePHP (routes.php) parsea la url y extrae los parámetros de esta petición, el controlador, la acción y cualquier otro argumento que afecte a la capa de negocio durante la petición. Usando los enrutadores, la petición de una url es mapeada o dirigida a una determinada acción del controlador. En este caso el método buy() del controlador: CakesController. El callback beforeFilter() del controlador es llamado antes que cualquier acción del controlador sea ejecutada. El controlador debe ser posible usar su modelo para conseguir acceso a los datos de la aplicación. En este ejemplo, el controlador usa un modelo para obtener las últimas compras de Ricardo almacenadas en la [...]
Necesitaba para mi registro una manera de integrar el típico select option con los nombres de los países. He creado un Helper para CakePHP que genera un listado de los paises. Está muy chulo y con tan sólo una línea en vuestro formulario lo tendréis funcionando. Incluir en vuestro controlador el Helper var $helpers = array(‘PaisesListado’); En vuestra vista app/views/(miaccion)/vista.ctp Añadir la linea en el formulario que crea la magia. Pais es el nombre que le doy al select option. null es para que no me ponga ninguna etiqueta adicional. ’00′ es el id del campo que quiero aparezca preseleccionado, en este caso es el texto que dice que seleccione un país. Ver en el helper: ’00′ =>’Selecciona un pais’, El siguiente es un array de atributos adiccionales para darle al select option. Copiar el contenido del siguiente Helper en app/views/helpers/paises_listado.php
Hace unas semanas escribía un post sobre la intrépida hazaña que me disponía a realizar: integrar smarty en cakephp. Tarea que tampoco es tan complicada ya que hay un buen manual en la web oficial. Si queréis verlo este es el link: the Bakery: smarty + cakePHP, pero es algo que realmente no recomienzo que hagáis. El problema no viene por la integración sino porque no hay mucha documentación e integrar los helpers, components,y demás script que hay desarrollados es casi imposible porque muchos están obsoletos o no están hechos para las plantillas de SMARTY y es imposible adaptarlos. Después unas semanas desarrollando el código me he tenido que parar y preguntar a otros programadores de cakephp para tener algo de feedback y otras opiniones: Cakephp en Español grupo en Google y en la web oficial de cakephp…la gente no tiene ni idea. Escribí una pregunta hace un tiempo y la gente no sabe/no contesta…. http://bakery.cakephp.org/articles/view/smarty-view-for-1-2#comment-5031 Uno de los desarrolladores principales de cakephp en la web oficial me comenta lo siguiente: “CakePHP is awesome. I’ve never used SMARTY, but I’ve heard of some people integrating it. My ajax validation component was never completely finished and uses deprecated methods. I really [...]