Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2011, 11:38
Dav1d
 
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