Grazie all’ottima documentazione di Yii sono riuscito in pochissimo tempo ad aggiungere ad un form un campo immagine. Al momento però, mi si presentano due problemi:
quando faccio l’aggiornamento di un record, non riesco a salvare le modifiche in quanto mi richiede ancora l’immagine.
avrei anche bisogno di ridimensionare l’immagine. Devo fare “a mano” o ci sono dei tool offerti da Yii?
Metto uno screenshot allegato a questo post. In pratica se arrivo alla pagina di modifica e faccio salva senza fare nulla… mi mostra la schermata che ho allegato.
L’immagine viene salvata correttamente. Ma non ridimensionata. In oltre si genera un eccezione:
PHP Error
Descrizione
include(CArray.php): failed to open stream: No such file or directory
File Sorgente
/var/www/yii/framework/YiiBase.php(395)
00383: * @return boolean whether the class has been loaded successfully
00384: */
00385: public static function autoload($className)
00386: {
00387: // use include so that the error PHP file may appear
00388: if(isset(self::$_coreClasses[$className]))
00389: include(YII_PATH.self::$_coreClasses[$className]);
00390: else if(isset(self::$classMap[$className]))
00391: include(self::$classMap[$className]);
00392: else
00393: {
00394: if(strpos($className,'\\')===false)
00395: include($className.'.php');
00396: else // class name with namespace in PHP 5.3
00397: {
00398: $namespace=str_replace('\\','.',ltrim($className,'\\'));
00399: if(($path=self::getPathOfAlias($namespace))!==false)
00400: include($path.'.php');
00401: else
00402: return false;
00403: }
00404: return class_exists($className,false) || interface_exists($className,false);
00405: }
00406: return true;
00407: }
Stack Trace
#0 /var/www/yii/framework/YiiBase.php(395): autoload()
#1 unknown(0): autoload()
#2 /var/www/anacletobazzi/protected/extensions/image/drivers/Image_GD_Driver.php(80): spl_autoload_call()
#3 /var/www/anacletobazzi/protected/extensions/image/Image.php(334): Image_GD_Driver->process()
#4 /var/www/anacletobazzi/protected/controllers/AutomobiliController.php(45): Image->save()
#5 /var/www/yii/framework/web/actions/CInlineAction.php(57): AutomobiliController->actionCreate()
#6 /var/www/yii/framework/web/CController.php(300): CInlineAction->run()
#7 /var/www/yii/framework/web/filters/CFilterChain.php(133): AutomobiliController->runAction()
#8 /var/www/yii/framework/web/filters/CFilter.php(41): CFilterChain->run()
#9 /var/www/yii/framework/web/CController.php(1084): CAccessControlFilter->filter()
#10 /var/www/yii/framework/web/filters/CInlineFilter.php(59): AutomobiliController->filterAccessControl()
#11 /var/www/yii/framework/web/filters/CFilterChain.php(130): CInlineFilter->filter()
#12 /var/www/yii/framework/web/CController.php(283): CFilterChain->run()
#13 /var/www/yii/framework/web/CController.php(257): AutomobiliController->runActionWithFilters()
#14 /var/www/yii/framework/web/CWebApplication.php(324): AutomobiliController->run()
#15 /var/www/yii/framework/web/CWebApplication.php(121): CWebApplication->runController()
#16 /var/www/yii/framework/base/CApplication.php(135): CWebApplication->processRequest()
#17 /var/www/anacletobazzi/index.php(13): CWebApplication->run()
… che chiedo scusa … ma non so leggere e correggere. Faccio qualche ricerca per risolvere questo problema. Vi tengo aggiornati. Se avete la soluzione vi prego di condividerla con me =(.
Il segreto era tutto racchiuso nell’installazione:
[indent]Installation ¶
Extract image folder under protected/extensions
Extract helpers folder under protected[/indent]
Non avevo installato correttamente la cartella helpers. Ho ricercato, infatti, l’errore che mi veniva fuori: e sono tornato proprio sulla pagina di questa estensione. Ho riletto tutto da capo ed ho fatot più attenzione questa volta. Grazie ancora per l’aiuto. Spero che queste mie disavventure possano essere di aiuto agli altri italiofoni di questo forum.
Purtroppo io mi sono imbattuto in PHPv5.1 quindi ho dovuto prendere qualche accorgimento per far funzionare correttamente la libreria. Ovviamente devi modificare il nome dell’array super globale $_FILES ed il gioco è fatto.
Diamine =) Mi hai appena fatto notare che avevo lasciato in sospeso questo post. In quel tempo credo di aver postato la soluzione solo nel post inglese.
Ok prova a dargli un occhio se hai tempo tieni conto che nel db non vorrei mettere la voce “immagine” dato che sarebbe l’avatar dell’utente lo salvo in una cartella e metto come nome "id"e poi per visualizzarlo guardo se c’è…
Mmmm non vedo il campo immagine. Io fossi in te, creerei un campo immagine di tipo varchar. Quando un utente mette su il suo avatar viene memorizzato li. Poi, che tu voglia usare l’id dell’utente o un altro valore cambia poco. Al più, puoi mettere in database 0 se non c’è l’immagine oppure 1 se c’è. Automaticamente, tu sai che l’immagine corrisponde esattamente all’id dell’utente.
Ti consiglio di fare così anche perchè andare a controllare se esiste un determinato file su disco è più dispendioso che controllare un campo di database. Anzi … quando fai login puoi caricare sull’utente ANCHE un valore che ti dice se ha o meno l’avatar e magari accercervi con Yii::app()->user->avatar oppure Yii::app()->user->hasAvatar().