interazione tra Zend_Db_Table e framework

Salve,

  oggi mi sono cimentato con la parte Zend_db_table. ed ho questo tipo di errore:

Ambiente:

/public/index.php(bootstrap)

<?php
error_reporting(E_ALL|E_STRICT);
ini_Set('display_errors', 1);
date_default_timezone_set('Europe/Rome'); 

set_include_path('.' . PATH_SEPARATOR . '../library' . PATH_SEPARATOR . '../application/models/' . PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";
Zend_Loader::registerAutoload();

/** carica la configurazione di sistema**/
$config = new Zend_Config_Ini('../config/config.ini', 'generale');
$registry= Zend_Registry::getInstance();
$registry->set('config',$config);



///** setup Database  **/
$db = Zend_Db::factory($config->database);
Zend_Db_Table::setDefaultAdapter($db);
//echo "<pre>";
//var_dump($db);
//echo "</pre>";
//exit;

/** Front Controller Section **/
$front = Zend_Controller_Front::getInstance(); 
$front->throwExceptions(true); 
$front->setControllerDirectory('../application/controllers'); 
Zend_Layout::startMvc(array('layoutPath'=>'../application/layouts'));

$front->dispatch();

/application/models/Albums.php

<?php
class Albums extends Zend_Db_Table {
   protected $_name= "albums";
}

/application/controllers/indexController.php

<?php
class IndexController extends Zend_Controller_Action { 
    function indexAction() {   //richiamata attraverso l'URL <urlapplicazione>/public
       $this->view->title = "I miei Album";
       $albums= new Albums();
       $provola = $albums->fetchAll();
       $this->views->albums=$provola;
//   [i][b]qui l'oggetto è istanziato correttamente coi dati del db[/b][/i]
    }
    
    function addAction(){      //richiamata attraverso l'URL <urlapplicazione>/public/index/add
       $this->view->title = "aggiungi Album";
    }
    function deleteAction(){   //richiamata attraverso l'URL <urlapplicazione>/public/index/delete
       $this->view->title = "Cancella Album";
    }
    function editAction(){      //richiamata attraverso l'URL <urlapplicazione>/public/index/edit
       $this->view->title = "Modifica Album";
    }
}

/application/scripts/index/index.phtml:

<p><a href="<?php echo $this->url(array('controller'=>'index',
      'action'=>'add'));?>">Aggiungi nuovo Album</a></p> 
<table>
<tr>
   <th>Titolo</th>
   <th>Artista<th>
   <th>&nbsp;<th>
</tr>
<?php 
echo "<pre>";
var_dump($this->albums);  //[b]qui è null[/b]
echo "</pre>";

sull'azione di default i dati vengono presi correttamente dal db, ma nella 'vista relativa'

l'oggetto $albums non è atttributo di $this...

da cosa potrebbe dipendere?

grazie

Andrea

inviato 8 anni fa
cybaSsh
X 0 X

$this->title invece viene passoto correttamente?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

si :(

risposto 8 anni fa
cybaSsh
X 0 X

...invece e come se non riuscisse a caricasse e registrasse l'oggetto (del modello) album. facendo il var_dump di $this non c'è traccia.

risposto 8 anni fa
cybaSsh
X 0 X

p.s.s.

il file di configurazione per l'accesso del web server .htaccess è:

RewriteEngine on
RewriteCond %{REQUEST_FILE} !-f
RewriteRule .* index.php

#security
Options -Indexes

#PHP settings
php_flag magic_quotes_gpc off
php_flag register_globals off
ph_flag short_open_tag on
risposto 8 anni fa
cybaSsh
X 0 X

Non è che $provola, dopo averlo assegnato a $this->views->albums, viene utilizzato per altro oppure lo cancelli?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

no, non lo cancello, ho messo direttamente

$this->views->albums = $albums->fetchAll();

l'oggetto $albums (che contiene l'insieme dei record) viene istanziato in IndexController ed inserito

$this->views->albums= $albums->fetchAll();

e messo dentro all'ambiente

poi successivamente mi si cancella da qualche parte ma non capisco ne dove ne come...potrebbe essere qualcosa nella configurazione di php? (mod_rewrite è abilitato...)

in'oltre mi da questo output, ma non so quanto è importante:

prima

Warning: Invalid argument supplied for foreach() in E:\www\AZend\application\views\scripts\index\index.phtml on line 14
Titolo    Artista

poi:

Strict Standards: Creating default object from empty value in E:\www\AZend\application\controllers\indexController.php on line 6
risposto 8 anni fa
cybaSsh
modificato 8 anni fa
X 0 X

altra domanda,

  è corretto se  provo a fare var_dump($_SESSION) mi  restituisce l'output NULL in index\index?

risposto 8 anni fa
cybaSsh
X 0 X

non so proprio da cosa possa dipendere...un'altra parte doev viene preso il controller è:

in \application\views\helpers\BaseUrl.php

<?php
class Zend_View_Helper_BaseUrl{
   function baseUrl(){
      $fc=Zend_Controller_Front::getInstance();
      return $fc->getBaseUrl();
   }
   
}

...ma non credo...

poi c'è una segnalazione nel Web Server quando lo avvio:

httpd.exe: Could not reliably determine the server's fully qualified domain name , using <mioipintranet> for ServerName

potrebbe essere questo?

no... non credo ...

risposto 8 anni fa
cybaSsh
modificato 8 anni fa
X 0 X

ultima cosa.... non mi fa vedere nemmeno un controllo

ho creato un'altro controllo, chiamato User. Quindi ho creato nella cartella

\application\controllers

la pagina userController.php contente il codice

<?php
//require_once 'Zend/Controller/Action.php';

class UserController extends Zend_Controller_Action{
  public function indexAction()
  {
    $this->view->assign('name', 'cosa?');
    $this->view->assign('title', 'Hello');
  }
    
}

e nella cartella E:\www\AZend\application\views\scripts\user il file index.phtml

che contiene il codice:

  <h1><?echo $this->escape($this->title);?>, <?echo $this->escape($this->name);?></h1>

ma se metto nel browser l'url http://localhost/app/public/user mi dice

Not Found

The requested URL /AZend/public/user was not found on this server.

 :-\

risposto 8 anni fa
cybaSsh
X 0 X

non mi funziona nemmeno l'esempio scaricato direttamente dal sito della zend (quickstart). quindi dovrebbe essere qualcosa nella configurazione del mio sistema. non rindirizza alle pagine dei controller

es:

/app/public/about      =>     The requested URL /AZend/public/user was not found on this server.

risposto 8 anni fa
cybaSsh
X 0 X

ho cambiato moido di fare debug, allora...seguendo l'esecuzione passo passo, ho scoperto che mi dava questo errore

Errore di Debug: E:\www\AZend\library\Zend\Db\Adapter\Pdo\Abstract.php linea 104 - Uncaught exception 'Zend_Db_Adapter_Exception' with message

'The mysql driver is not currently installed' in E:\www\AZend\library\Zend\Db\Adapter\Pdo\Abstract.php:104Stack trace:

#0 E:\www\AZend\library\Zend\Db\Adapter\Abstract.php(390): Zend_Db_Adapter_Pdo_Abstract->_connect()

#1 E:\www\AZend\library\Zend\Db\Adapter\Pdo\Abstract.php(206): Zend_Db_Adapter_Abstract->query('DESCRIBE `album...', Array)

#2 E:\www\AZend\library\Zend\Db\Adapter\Pdo\Mysql.php(137): Zend_Db_Adapter_Pdo_Abstract->query('DESCRIBE `album...')

#3 E:\www\AZend\library\Zend\Db\Table\Abstract.php(605): Zend_Db_Adapter_Pdo_Mysql->describeTable('albums', NULL)

#4 E:\www\AZend\library\Zend\Db\Table\Abstract.php(534): Zend_Db_Table_Abstract->_setupMetadata()

#5 E:\www\AZend\library\Zend\Db\Table\Abstract.php(269): Zend_Db_Table_Abstract->_setup()

#6 E:\www\AZend\application\controllers\indexController.php(7): Zend_Db_Table_Abstract->__construct()

#7 E:\www\AZend\library\Zend\Controller\Action.php(502): IndexController->indexAction()

#8 E:\www\AZend\library\Zend\Controller\Dispatcher\Standard.php(293): Zend_Controller_Action->dispatch('indexAction')

#9 E:\www\AZend\library\Zend\Controller\Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))

#10 E:\www\AZend\public\index.php(30): Zend_Controller_Front->dispatch()

#11 C:\Programmi\Zend\ZendStudio-5.5.0\bin\php5\dummy.php(1): include('E:\www\AZend\pu...')

#12 {main}

  thrown

che significa? io le libbrerie le ho caricate sull'interprete php...

Andrea

risposto 8 anni fa
cybaSsh
X 0 X

Hai caricato PDO e PDO MySQL?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ho caricato i seguenti moduli:

...

extension=php_mysql.dll

extension=php_mysqli.dll

extension=php_oci8.dll

;extension=php_openssl.dll

extension=php_pdo.dll

;extension=php_pdo_firebird.dll

;extension=php_pdo_mssql.dll

extension=php_pdo_mysql.dll

...

pero su phpinfo mi da:PDO

PDO support   enabled

PDO drivers    mysql

pdo_mysql

PDO Driver for MySQL, client library version   5.0.51a

il dubbio mi miene pensando che ho installato Mysql 6.0 ....

risposto 8 anni fa
cybaSsh
modificato 8 anni fa
X 0 X

altra cosa strana è che creando la pagina testpdo.php contenente:

<?php
$hacamemucho=PDO::getAvailableDrivers();
print_r($hacamemucho);
?>

il browser mi da in oputput

Array ( [0] => mysql )

ed il debugger

Array

(

    [0] => sqlite2

)

normale?

risposto 8 anni fa
cybaSsh
X 0 X

Il debugger forse usa un php.ini diverso da quello del server.

MySQL 6  :o torna al 5 e facci sapere

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

usando l'adattatore mysqli l'oggetto db viene istanziato correttamente, mentre con pdo non funziona benchè abbia abilitato tutte le estensioni.

il problema ritorna quello iniziale, ovvero che non persiste $this->albums.

fino IndexController è istanziato $this->views->albums

persiste su ../zend/controller/action.php

anche su ../zend/controller/action/helperBroker.php con l'istanza $this->_actionController->views-albums

anche ../zend/controller/action/Helper/layout.php

Zend_Controller_Action_Helper_ViewRenderer c'è ancora dopo il postdispatch

quando vado al file phtml, non c'è nessun oggetto albums incapsulato....

Andrea

ps spero di non essere stato troppo ingarbugliato nello spiegare....ma è un argomento per me complicato ora il debug del framework

risposto 8 anni fa
cybaSsh
X 0 X

mi da come risultato queste informazioni di debug:

Avviso di Debug: E:\www\AZend\library\Zend\Loader.php linea 160 - fopen(..\application\views\helpers\Url.php) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory

Avviso di Debug: E:\www\AZend\application\views\scripts\index\index.phtml linea 16 - Invalid argument supplied for foreach()

Avviso di Debug: E:\www\AZend\library\Zend\Loader.php linea 160 - fopen(..\application\views\helpers\Layout.php) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory

è strano che mi prende come come Helpers il file Url.php(che non esiste) invece di Baseurl.php(stesso discorso anche per layout.php che esiste peroò si trova in application/layout/

risposto 8 anni fa
cybaSsh
X 0 X

non so come, ma funziona...ora:ho cambuiato il config.ini, index.php...non so di preciso...

...

scusate, e grazie per l'atttenzione.

Andrea

risposto 8 anni fa
cybaSsh
modificato 8 anni fa
X 0 X

non so come, ma funziona...ora:ho cambuiato il config.ini, index.php...non so di preciso...

...

scusate, e grazie per l'atttenzione.

Andrea

tutto è bene quel che finisce bene  ;)

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

...solamente che una soluzione lineare e definita sarebbe stato utile a qualcun'altro.

risposto 8 anni fa
cybaSsh
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda