Foros del Web » Programando para Internet » PHP » Zend »

Dudas en los primeros pasos de Doctrine en Zend

Estas en el tema de Dudas en los primeros pasos de Doctrine en Zend en el foro de Zend en Foros del Web. Hola He descargado doctrine 1.2 y la he instalado en Zend, porque la 1 es la única versión que he visto manuales explicativos, en la ...
  #1 (permalink)  
Antiguo 01/07/2011, 11:38
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Dudas en los primeros pasos de Doctrine en Zend

Hola

He descargado doctrine 1.2 y la he instalado en Zend, porque la 1 es la única versión que he visto manuales explicativos, en la dos, después de varias horas, no había avanzado nada y el manual trabaja con esta versión.

Así pues, dentro de library tengo esta estructura con respecto a doctrine.

library
-Doctrine
--Doctrine
--Doctrine.php

Luego siguiendo ese manual y adpatandolo a otro que he visto, en Bootstrap.php he creado está función:
Código PHP:
 protected function _initDoctrine ()
    {
         require_once 
'Doctrine/Doctrine.php';
        
$this->getApplication()
            ->
getAutoloader()
            ->
pushAutoloader(array('Doctrine''autoload'), 'Doctrine');
        
$manager Doctrine_Manager::getInstance();
        
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING
        
Doctrine::MODEL_LOADING_CONSERVATIVE);
        
$config $this->getOption('doctrine');
        
$conn Doctrine_Manager::connection($config['dsn'], 'doctrine');
        
        
Doctrine::generateModelsFromDb(APPLICATION_PATH '/tmp/models', array('doctrine'), array('generateTableClasses' => true));
        return 
$conn;
       
    } 
antes en application.ini he puesto esto:

Código:
doctrine.dsn = "mysql://usuario:mipassword@localhost/prueba"
pongo esta url en el navegador:

Código:
http://localhost
Y me crea en la ruta, application/tmp una serie de archivos y una carpeta generated con más archivos php, un ejemplo de estos archivos es esto:

application
-tmp
-Country.php
-CountryTable.php
-Item.php
-ItemTable.php
--generated
---ItemCountry.php
---ItemGrade.phb

Mi primera duda, que hago con esos archivos ¿Dónde los pongo?

Ahora, he creado un modulo según el manual, llamado catalog con el controler así pues esta es la estructura.

application
-modules
--default
--catalog
---controllers
----ItemController.php
---models
---views
----filters
----helpers
----scripts
-----item
------index.phtml

El código de ItemController.php, según el manual es este:

Código PHP:
<?php
class Catalog_ItemController extends Zend_Controller_Action
{
    public function 
init ()
    {
        
/* Initialize action controller here */
    
}
    public function 
displayAction ()
    {
        
// set filters and validators for GET input
        
$filters = array(
        
'id' => array('HtmlEntities''StripTags''StringTrim'));
        
$validators = array('id' => array('NotEmpty''Int'));
        
// test if input is valid
        // retrieve requested record
        // attach to view
        
$input = new Zend_Filter_Input($filters
        
$validators);
        
$input->setData($this->getRequest()
            ->
getParams());
        if (
$input->isValid()) {
            
$q Doctrine_Query::create()->from('Item i')
                ->
leftJoin('i.Country c')
                ->
leftJoin('i.Grade g')
                ->
leftJoin('i.Type t')
                ->
where('i.RecordID = ?'$input->id);
            
$result $q->fetchArray();
            if (
count($result) == 1) {
                
$this->view->item $result[0];
            } else {
                throw new 
Zend_Controller_Action_Exception('Page not found'404);
            }
        } else {
            throw new 
Zend_Controller_Action_Exception('Invalid input');
        }
    }
}
y en la carpeta de esté modulo donde se ha creado el item.phtml creo otro phtml llamado display.phtml, porque lo dice el manual con este código:

Código PHP:
<h2>View Item</h2>
<h3>
FOR SALE:
<?php echo $this->escape($this->item['Title']); ?> -
<?php echo $this->escape($this->item['Year']); ?> -
<?php echo $this->escape($this->item['Grade']
[
'GradeName']); ?>
</h3>
<div id="container">
<div id="record">
<table>
<tr>
<td class="key">Title:</td>
<td class="value">
<?php echo $this->escape($this->item['Title']); ?>
</td>
</tr>
<tr>
<td class="key">Type:</td>
<td class="value">
<?php echo $this->escape(
$this->item['Type']['TypeName']); ?>
</td>
</tr>
<tr>
<td class="key">Year:</td>
<td class="value">
<?php echo $this->escape($this->item['Year']); ?>
</td>
</tr>
<tr>
<td class="key">Country:</td>
<td class="value">
<?php echo $this->escape(
$this->item['Country']['CountryName']); ?>
</td>
</tr>
<tr>
<td class="key">Denomination:</td>
<td class="value">
<?php echo $this->escape(
sprintf('%01.2f'$this->item['Denomination'])); ?>
</td>
</tr>
<tr>
<td class="key">Grade:</td>
<td class="value">
<?php echo $this->escape(
$this->item['Grade']['GradeName']); ?>
</td>
</tr>
<tr>
<td class="key">Sale price:</td>
<td class="value">
$<?php echo $this->escape($this->item['SalePriceMin']); ?> -
$<?php echo $this->escape($this->item['SalePriceMax']); ?>
</td>
</tr>
<tr>
<td class="key">Description:</td>
<td class="value">
<?php echo $this->escape($this->item['Description']); ?>
</td>
</tr>
</table>
</div>
</div>
El manual también me dice que en application.ini ponga esto:
Código:
resources.router.routes.catalog-display.route = /catalog/item/display/:id
resources.router.routes.catalog-display.defaults.module = catalog
resources.router.routes.catalog-display.defaults.controller = item
resources.router.routes.catalog-display.defaults.action = display
Ahora al poner la url esta, tendría que ver algunos resultados, y veo el siguiente error:

la url:
Código:
http://localhost/catalog/item/1
el error:

Código:
An error occurred
Page not found
Exception information:

Message: Action "1" does not exist and was not trapped in __call()
Stack trace:

#0 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(515): Zend_Controller_Action->__call('1Action', Array)
#1 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('1Action')
#2 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 C:\xampp\htdocs\quickstart\public\index.php(26): Zend_Application->run()
#6 {main}  

Request Parameters:

array (
  'module' => 'catalog',
  'controller' => 'item',
  'action' => '1',
)

Yo supongo que la ubicación de los archivos generados, puede ser importante, pero a partir de ahí ya me pierdo, porque llevo mirando toda la tarde en google y hasta aquí he podido llegar.

Un saludo
  #2 (permalink)  
Antiguo 01/07/2011, 12:32
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Integrar Doctrine es algo relativamente simple si se conocen las dos herramientas, si no es tu caso te sugiero que utilices zfdoctrine, creado por B. Eberlei, con el plus de que te genera los form a partir de los modelos ;) .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 02/07/2011, 06:41
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

como estoy empezando con doctrine, con zfdoctrine, me surgen las mismas dudas, es decir como empezar y colocar los directorios, una vez hecho esto ya puedo ver la sintaxis, pero el caso es empezar, y todos estos manuales son confusos, por eso posteo para ver si puedo por lo menos empezar y a partir de ahí sigo con mis manuales.
  #4 (permalink)  
Antiguo 02/07/2011, 06:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

En el github te dice paso a paso lo que debes hacer, te da hasta los .yml de prueba, donde te has quedado ?, ya tienes instalado el componente y habilitado el provider ?(para probar has en la consola dentro de la carpeta del proyecto zf ? doctrine y deberia mostrarte las opciones de doctrine)
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 02/07/2011, 07:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Hola

Como tengo windows 7, he descargado ZFDoctrine y he puesto la carpeta dentro de library en el proyecto Zend.

Cuando pongo en la consola de windows esto, me da error:

C:/ZendFramework-1.11.6/bin/zf enable config.provider ZFDoctrine_Tool_DoctrineProvider

Se supone que tengo que en algún punto relacionar ZFDoctrine para que lo reconozca, pero en el manual que no hay explicación paso a paso para windows, no me lo deja claro y de ahí ya no puedo pasar.

Saludos
  #6 (permalink)  
Antiguo 02/07/2011, 08:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Hay que leer bien, ZFDoctrine debe estar en el include_path, lo has agregado al mismo ?, si no lo has echo, sigue los pasos de la sección Zend_Tool Configuration.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 02/07/2011, 09:00
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Según Zend_Tool configuration, hay que hacer esto

benny@benny-pc:~$ zf create config
Successfully written Zend Tool config.
It is located at: /home/benny/.zf.ini

Esto me ha creado el archivo .zf.ini en C:/usuarios/david

este archivo lo he copiado en la carpeta raíz de mi proyecto Zend, el contenido de este archivo era este:

php.include_path = ".;C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library"

lo he modificado por este otro, buscando la carpeta de ZFDdoctrine, que está en mi proyecto, que se llama quickstart/library/ZFDoctrine

he ejecutado lo que antes me daba error y todavía me da error.

Hay algunas dudas, donde colocar .zf.ini, que poner en el php.include_path exactamente
  #8 (permalink)  
Antiguo 02/07/2011, 09:17
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

No lo copies, edita el archivo que te crea en la carpeta de tu usuario y en el include_path tienes que agregar la ruta a donde esta ZFDoctrine.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 02/07/2011, 09:50
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Qué difícil parece esto, he editado el archivo .zf.ini que se creo en C:/Users/david

he puesto la ruta donde está la carpeta ZFDdoctrine

php.include_path = "C:\xampp\htdocs\quickstart\library\ZFDoctrine "

y al abrir la consola y poner esto:

C:/ZendFramework-1.11.6/bin/zf ? doctrine

el primer mensaje que sale es:

An Error Has Occurred
Provideer 'docrine' is not a valid provider
  #10 (permalink)  
Antiguo 02/07/2011, 10:08
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

La ruta seria hasta library(C:\xampp\htdocs\quickstart\library), y un par de preguntas, el include_path estaba vacio ? no tenia el path a pear ?, al registrar el provider no te mostro ningun error ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 03/07/2011, 09:07
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Ya he avanzado bastante, resolví el problema anterior y al poner esto:

Código:
C:\ZendFramework-1.11.6\bin\zf create-project doctrine 
--dsn=mysql://root:pasw@localhost/prueba --library-per-module
Me ha creado en el directorio application/configs las carpetas fixtures, migrations, schema, sql sin nada en su interior. Yo pensaba que al poner la opción para módulo me modificaría también dentro de los modulos, pero parece que es así.

Ahora el siguiente paso es:

Generating Models in a Modular MVC

El ejemplo, dice de algunos yml, pero yo quiero fabricar según mi aplicación, y he puesto esto en la consola.

Código:
C:\ZendFramework-1.11.6\bin\zf generate-models-from-yaml doctrine
pero me da el siguiente error:
Código:
C:\xampp\htdocs\quickstart>C:\ZendFramework-1.11.6\bin\zf generate-models-from-yaml doctrine

Warning: include_once(Doctrine\Core.php): failed to open stream: No such file or
 directory in C:\ZendFramework-1.11.6\library\Zend\Loader.php on line 146

Warning: include_once(): Failed opening 'Doctrine\Core.php' for inclusion (inclu
de_path='C:\xampp\htdocs\quickstart/application/../library;C:\ZendFramework-1.11
.6\library;.;C:\xampp\htdocs\quickstart\library') in C:\ZendFramework-1.11.6\lib
rary\Zend\Loader.php on line 146
                          An Error Has Occurred
 Could not find Doctrine library in project and include path.

Zend Framework Command Line Console Tool v1.11.6
Details for action "GenerateModelsFromYaml" and provider "Doctrine"
  Doctrine
    zf generate-models-from-yaml doctrine


C:\xampp\htdocs\quickstart>
el archivo .zf.ini ha quedado así:

Código:
php.include_path = ".;C:\xampp\htdocs\quickstart\library;"
basicloader.classes.0 = "ZFDoctrine_Tool_DoctrineProvider"
  #12 (permalink)  
Antiguo 03/07/2011, 09:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Doctrine esta en el include_path ?, y el comando zf lo tienes que ejecutar parado en la carpeta del proyecto.
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 03/07/2011, 10:00
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Si el zf siempre lo ejecuto en la carpeta del proyecto y me funciona bien, menos en este último punto. Y en el include_path tengo puesto esto (el archivo que se creo en C:\Usuarios\david\.zf.ini)

php.include_path = ".;C:\xampp\htdocs\quickstart\library"

En la carpeta library está la carpeta ZFDoctrine que me he descargado de esa web.
  #14 (permalink)  
Antiguo 03/07/2011, 11:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Doctrine tiene que estar también dentro de library y el zf tenes que ejecutarlo dentro del proyecto, si te da error postea cual es.
__________________
http://es.phptherightway.com/
thats us riders :)
  #15 (permalink)  
Antiguo 04/07/2011, 05:07
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

He visto que si pongo en la carpeta schema el archivo user.yml del ejemplo :


application/configs/schema/user.yml

al ejectutar zf generate-models-from-yaml doctrine

Me crea en el modulo default, esta estructura

application
-modules
--default
---library
----Default
-----Model
------Base

en el raíz de la carpeta Model y dentro de la carpeta base me crea estos archivos

Permission.php, Role.php, RolePermission.php, User.php, UserPermission.php, UserRole.php

Mi gran duda ahora es ?

Para cada tabla de mi base de datos tengo que crear a mano el archivo yml ?

Yo la base de datos y las tablas ya las tenía creadas.

Otra duda, me ha creado los archivos dentro del módulo default, ¿No hace nada dentro de los otros módulos?
  #16 (permalink)  
Antiguo 04/07/2011, 10:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Dudas en los primeros pasos de Doctrine en Zend

Por fin salió !

Vaya fin de semana he estado liado, al final parece todo muy fácil, pero con 4 detalles, puedes volverte loco.

Voy con los pasos.

He tenido que crear el schema.ylm a través de este comando:

zf generate-yaml-from-database doctrine

luego he tenido que renombrar los nombres de las tablas con el modelo correspondiente:

Código:
Catalog_Model_Country:
  connection: default
  tableName: country
  columns:
    countryid:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    countryname:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: falseCountry:
  connection: default
  tableName: country
  columns:
    countryid:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    countryname:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
ha sido renombrado a :
Código:
Catalog_Model_Country:
así con todos, (Catalog es el nombre de un modulo)

después he ejecutado esta instrucción:

zf generate-models-from-yaml doctrine

Me ha creado dentro del modulo catalog una carpeta llamada library y dentro Model y dentro Base, pues bien, otra cosa que no está en el manual, hay que copiar esta carpeta a la carpeta model del modulo, esto parece fácil pero sino lo sabes, y en ningún sitio te lo dice, te puedes morir.

finalmente he puesto el código del manual y listo.

Etiquetas: doctrine, dudas, frameworks-y-php-orientado-a-objetos, pasos, primeros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:48.