De la mano de Zend Developer Zone, nos llega un tutorial con ejemplos y muy bien escrito, vamos que después de leer ya me he enterado como leer los p.. Exel de MS.
enlace: Reading and Writing Spreadsheets with PHP
En la Wiky de ZF hay una aplicación de demostración para ver la utilización de Zend_Layout y Zend_View.
descargar: demo-website-zlayout-zve-0.1.tar.gz
enlace: Zend_Layout and Zend_View Enhancements Demo
En palabras de su creador; Thorsten Suckow-Homberg:
“Ext.ux.YoutubePlayer permite a los desarrolladores integrar vídeos de YouTube ,utilizando ExtJs framework, para controlar la reproducción de vídeo. No muestra la carga del vídeo pero puedes moverte en el tiempo del vídeo(time slider) y puedes controlar el volumen”
Es open source, y bantante bonito para insertarlo en mi Proyecto 004.
web: http://www.siteartwork.de/youtubeplayer/
descargar: http://www.siteartwork.de/youtubeplayer/youtubeplayer.zip
preguntas: http://extjs.com/forum/showthread.php?t=30352
Me han enviado una sería de preguntas de personas que quieren saber como se maneja la autentificación y la persistencia(* de sesión) de usuarios con Zend Framework. El típico problema es no estar seguro como combinar:
No es demasiado difícil, pero necesitas saber trabajar con MVC y la utilización de Zend_Auth. Vamos a echar un vistazo.
Para que esto funcione necesitas un adaptador de autentificacion(* Zend_Auth). No voy a entrar en detalles sobre esto; podrá encontrar más información en la documentación oficial, el uso varia según el sitio. Voy a imaginar que un adaptador de autentificación necesita un nombre de usuario y contraseña como información de autentificación. nuestro formulario de acceso utilizará este adaptador, sino simplemente tener un lugar de recuperación.
El formulario es bastante simple. Puedo configurar algunas de las reglas de validación para prevenir errores en la consulta de la base de datos, pero de una menra relativamente simple. Para los propositos de este tutorial, vamos a definir los siguientes criterios: -el nombre del usuario debe ser sólo caracteres alfabéticos, y contener entre 3 y 20 caracteres -la contraseña constará de caracteres alfanuméricos, y debe tener entre 6 y 20 caracteres. el formularios sería algo así:
class LoginForm extends Zend_Form
{
public function init()
{
$username = $this->addElement(‘text’, ‘username’, array(
‘filters’ => array(‘StringTrim’, ‘StringToLower’),
‘validators’ => array(
‘Alpha’,
array(‘StringLength’, false, array(3, 20),
),
‘required’ => true,
‘label’ => ‘Your username:’,
));
$password = $this->addElement(‘password’, ‘password’, array(
‘filters’ => array(‘StringTrim’),
‘validators’ => array(
‘Alnum’,
array(‘StringLength’, false, array(6, 20),
),
‘required’ => true,
‘label’ => ‘Password:’,
));
$login = $this->addElement(’submit’, ‘login’, array(
‘required’ => false,
‘ignore’ => true,
‘label’ => ‘Login’,
));
// We want to display a ‘failed authentication’ message if necessary;
// we’ll do that with the form ‘description’, so we need to add that
// decorator.
$this->setDecorators(array(
‘FormElements’,
array(‘HtmlTag’, array(‘tag’ => ‘dl’, ‘class’ => ‘zend_form’)),
array(‘Description’, array(‘placement’ => ‘prepend’)),
‘Form’
));
}
}
ahora vamos a crear el controlador para el Login y Logout. Las caractaristica típicas sería así:
El controlador de Login(LoginController) hará uso del adaptador de autentificación elegido. así como el formulario de acceso. Vamos a pasar al formulario de acceso, contruir el formulario y el método de la acción. Cuando tengamos valores válidos, se lo pasa a nuestro adaptador de autentificación. Así que vamos a crear el controlador. En primer lugar, le vamos a crear el formulario y el adaptador de autentificación.
class LoginController extends Zend_Controller_Action
{
public function getForm()
{
return new LoginForm(array(
‘action’ => ‘/login/process’,
‘method’ => ‘post’,
));
}
public function getAuthAdapter(array $params)
{
// Leaving this to the developer…
// Makes the assumption that the constructor takes an array of
// parameters which it then uses as credentials to verify identity.
// Our form, of course, will just pass the parameters ‘username’
// and ‘password’.
}
}
Luego tenemos que verificar los envios, antes de caulquier cosa para ganrantizar los siguiente: -si el usuario ya está auntentificado,(* y a salido por algun motivo y vuelve a entar) hay que redirigirle a la página(*sin que haga nada) -El usuario no está auntentificado, porque ha cerrado la seción, hay que redirigirle a la página de acceso. La siguiente rutina”preDispatch()” lo hará por nosotros.
class LoginController extends Zend_Controller_Action
{
// …
public function preDispatch()
{
if (Zend_Auth::getInstance()->hasIdentity()) {
// If the user is logged in, we don’t want to show the login form;
// however, the logout action should still be available
if (‘logout’ != $this->getRequest()->getActionName()) {
$this->_helper->redirector(‘index’, ‘index’);
}
} else {
// If they aren’t, they can’t logout, so that action should
// redirect to the login form
if (‘logout’ == $this->getRequest()->getActionName()) {
$this->_helper->redirector(‘index’);
}
}
}
}
ahora tenemos que hacer nuestro formulario de acceso. Este es el metodo más simple que recupera el constructor el formulario y lo pinta en la salida del (x)html.
class LoginController extends Zend_Controller_Action
{
// …
public function indexAction()
{
$this->view->form = $this->getForm();
}
}
El procesamiento del formulario implica un poco más de lógica. tenemos que verificar que tenemos un puesto de petición, luego que el formulario sea válido y por último que los datos sean validos.
class LoginController extends Zend_Controller_Action
{
// …
public function processAction()
{
$request = $this->getRequest();
// Check if we have a POST request
if (!$request->isPost()) {
return $this->_helper->redirector(‘index’);
}
// Get our form and validate it
$form = $this->getForm();
if (!$form->isValid($request->getPost())) {
// Invalid entries
$this->view->form = $form;
return $this->render(‘index’); // re-render the login form
}
// Get our authentication adapter and check credentials
$adapter = $this->getAuthAdapter($form->getValues());
$auth = Zend_Auth::getInstance();
if (!$auth->isValid($adapter)) {
// Invalid credentials
$form->setDescription(‘Invalid credentials provided’);
$this->view->form = $form;
return $this->render(‘index’); // re-render the login form
}
// We’re authenticated! Redirect to the home page
$this->_helper->redirector(‘index’, ‘index’);
}
}
Por ultimo, podemos añadir la acción de cerrar sesion. estó es tan simple como borrar los datos de autentificación. <<CODIGO seis>> Bueno, es todo para nuestro controlador de autentificación
class LoginController extends Zend_Controller_Action
{
// …
public function logoutAction()
{
Zend_Auth::getInstance()->clearIdentity();
$this->_helper->redirector(‘index’); // back to login page
}
}
La úlima parte de la pregunta es: ¿Cómo determinar si un usuario está autentificado, y restringir el acceso si no? Si se mira con detenimiento el método “preDispatch()” en las lineas anteriores(más arriba) se puede ver ya la forma de hacerlo. Zend_Auth persiste en la identificación de posteriores sesiones, lo que le permitirá consultar directamente utilizando esta construcción: Zend_Auth:: getInstance () -> hasIdentity () Puede utilizar esto para determinar si el usuario está conectado y, a continuación, utilizar el redireccionamiento para redirigirle a la página de acceso si no está conectado. Puede tirar de la identidad del objeto Auth. $ Identidad = Zend_Auth:: getInstance () -> getIdentity (); Esto podría ser colocado en un Helper para mostrar el estado de la utentificación. por ejemplo:
/**
* ProfileLink helper
*
* Call as $this->profileLink() in your layout script
*/
class My_View_Helper_ProfileLink
{
public $view;
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
public function profileLink()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$username = $auth->getIdentity()->username;
return ‘<a href=”/profile’ . $username . ‘”>Welcome, ‘ . $username . ‘</a>’;
}
return ‘<a href=”/login”>Login</a>’;
}
}
Zend_Auth hace un montón de trabajo por detrás de las escenas para que la persistencia de una identidad en el periodo de sesiones sea trivial. Combínalo con Zend_Form(* si de verdad te vale) y podrás implementarlo fácilmente para la recuperación y validación de los usuarios. Añade utilidades(*preDispatch()) en el Zend_Controller() y se puede restringir el acceso a las apliaciones, basados en la autentificicación.
Segunda parte del vídeotutorial que ha creado killerphp.com para mostrar el funcioanmiento de MVC con Zend Framework.
En está parte ponen ejemplos, sencillos, de los action y Zend_Db
vídeo: http://www.killerphp.com
post: setting-up-an-mvc-structure-with-the-zend-framework-part-2
/***************************** code */
<?php
$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));
// Extract content.
$content = (string) $word->ActiveDocument->Content;
echo $content;
$word->ActiveDocument->Close(false);
$word->Quit();
$word = null;
unset($word);
/***************************** end-code */
enlace al post original: http://www.developertutorials.com/
Un articulo interesante para los que todavía no utilizan las excepciones de php5; con un ejemplo muy simple para comprender el uso que le debemos dar; con sus ventajas.
enlace: PHP 5 features: Exceptions
Un vídeo bastante ilustrativo para empezar a trabajar en MVC con ZF; está en ingles pero es bastante fácil de entender.
web: setting-up-an-mvc-structure-with-the-zend-framework-part-1/
vídeo: http://www.killerphp.com/zend-framework/videos/mvc-zend-part-1.php
Uno de mis objetivos de este año es sacarme la certificación de Zend php5; y hoy acaba de llegar el libro de ayuda(guía).
Sin duda este es el primer paso que se puede dar para sacarse la certificación; estuve mirando academias para preparármelo pero el contenido de los cursos no tenía nada que ver con la certificación; así que por lo pronto este es el primer paso que hay que dar(aquí en Madrid); comprarse el libro.

Como puntualización; recomiendo comprarlo por www.amazon.com a ser preferible en la parte de segunda mano; sale más barato.
Ultimamente ando haciendo una mini aplicación que pretendo liberar; una gráfica(sencilla) para hacernos una idea de lo que es:
Proyecto 004 es una aplicación web para mostrar vídeo, imagen, sonido, y notas de blog(esto está por verse) con la cualidad de que todas los medias están alojados en webs sociales consolidadas.
Está aplicación está pensada para la gente que tiene un pequeño grupo musical, grupo de teatro o simplemente para un egocentrico que quiere poner sus videos, fotos y música favorita. La persona solo tendría que comprarse un dominio, hosting personal(porque todo el peso de tráfico recae sobre las webs sociales) e instalarse la aplicación en su servidor.
La aplicación la estoy desarrollando sobre ZF; por ahora estoy utilizando Zend_Gdata y Zend_Service_Flickr y para la parte de javascript pienso utilizar ExtJs como framework.
El mayor problema lo estoy econtrando en el soporte de MP3 porque no encuentro ninguna web social con web-service(API pública) ; si alguno conce una; agradecería avisarme ![]()
Es mi primer miniproyecto, en solitario, así que agradecería todo tipo de criticas y comentarios.