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;
}
Código:
pongo esta url en el navegador:doctrine.dsn = "mysql://usuario:mipassword@localhost/prueba"
Código:
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:http://localhost
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');
}
}
}
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>
Código:
Ahora al poner la url esta, tendría que ver algunos resultados, y veo el siguiente error: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
la url:
Código:
el error:http://localhost/catalog/item/1
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