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