In test, ho
defined('YII_DEBUG') or define('YII_DEBUG', true);
mentre, ovviamente, in produzione ho
defined('YII_DEBUG') or define('YII_DEBUG', false);
Se per una pagina a cui sta accedendo un utente non ha i dovuti permessi RBAC in test ottengo una bella CHttpException, con testo “Non si ha l’autorizzazione ad effettuare l’operazione”.
Viene da questa porzione di codice, posizionata in yii/framework/web/auth/CAccessControlFilter.php(182)
177 protected function accessDenied($user,$message)
178 {
179 if($user->getIsGuest())
180 $user->loginRequired();
181 else
182 throw new CHttpException(403,$message);
183 }
Da qualche tempo devo aver modificato male qualcosa perchè se ho un accessDenied mi compare a schermo questo schifosssimo testo, non decorato dal tema, segno che qualcosa è andato storto
Notice: Array to string conversion in /var/www/httpdocs/<domain>/yii/framework/web/CWebApplication.php on line 314
Notice: Array to string conversion in /var/www/httpdocs/<domain>/yii/framework/YiiBase.php on line 617
CHttpException
Unable to resolve the request "Array".
Ci tengo a precisare che i due notice li ho forzati solo ora per fare del debug
La versione di Yii è 1.1.16-release
Cosa c’è che non va?
Ho aggiunto un dump nella CWebApplication e questo è l’array incriminato, dove invece dovrebbe esserci una stringa
array
(
0 => 'site/error'
)
Questo mi ha ricordato qualcosa visto su github qui: https://github.com/yiisoft/yii/pull/2903#issuecomment-25002185
Aveva a che fare col problema di avere lo stack trace in sviluppo, così la soluzione proposta è di inserire nel config/main.php questo
'errorHandler'=>array(
'errorAction' => YII_DEBUG ? null : array('site/error'),
),
Peccato che fosse errato, andava corretto in
'errorHandler'=>array(
'errorAction' => YII_DEBUG ? null : 'site/error',
),