Bonjour tout le monde,
j'ai un soucis que je n'arrive pas à résoudre... J'ai une application qui est en plusieurs langues, et pour avoir la liste des langues disponibles je fais un find dans le beforeRender de l'AppController ce qui rend cette liste disponible dans l'ensemble de l'application.
public function beforeRender(){
parent::beforeRender();
$this->loadModel('Locale');
$locales = $this->Locale->find('list', array('order' => 'name ASC', 'conditions' => array('active' => 1)));
$this->viewVars'locales'] = $locales;
}
Ca fonctionne parfaitement en faisant sur MAMP, j'ai SELECT Locale
.id
, Locale
.name
FROM archi
.locales
AS Locale
WHERE active
= '1' ORDER BY name
ASC 2
Par contre quand je fais la même chose sur mon hébergement OVH et bien j'ai
Fatal error: Call to undefined method Locale::find() in /homez.764/architheg/www/app/Controller/AppController.php on line 174
Comme vous le voyez dans l'erreur, tout cakephp lib et app se trouve dans le /www/
La seule chose qui change c'est le SetEnv PHP_VER 5_3 en debut des 3 .htaccess
-> maintenant la version de php est gérée dans un fichier .ovhconfig à la racine du "www" (donc je ne touche plus aux .htaccess
Bref voila, je ne comprends pas pourquoi le model 'Locale' n'est pas chargé correctement dans mon AppController...
Peut être avez vous une autre idée pour avoir la liste des langues dispo autrement que par un find dans l'appcontroller ?
Merci d'avance.
Bonsoir,
je reviens vers vous une dernière fois, après de très très nombreuses recherches, il semble que CakePhp n'accepte pas un model du nom de "Locale" avec le controller "LocalesController" et la table "Locales". Peut être qu'il est déjà utilisé dans le noyau, quoi qu'il en soit j'ai résolu mon problème en remplaçant tout ca par "Lang", "LangsController" et "Langs".
Existe t'il une liste de termes interdits ou déja utilisés dans CakePhp pour les models/controllers/tables ?
Cela ne change rien.
En fait, il me fait une erreur à chaque fois que j'utilise
$this->loadModel('Locale');
et pas seulement dans l'AppController... je pense que c'est directement lié à mon hébergeur, car je n'ai aucun soucis en local.
Je précise que mon hébergement est un OVH Mutualisé.
Y'a t'il des manips particulières pour mettre en ligne son app sur un OVH Mutualisé ? un tuto sur Cakephp et OVH ?
Merci d'avance, c'est la première fois que je mets une app online et c'est la grosse galère...
J'ai un OVH mutualisé, et je n'ai pas encore rencontré cette erreur.
Supprime la ligne "public $uses = array()" si elle existe sinon essaie d'ajouter cette ligne contenant locale.
public $uses = array('Locale');
...
Met a jour ton dossier lib de cakephp
Bon rien n'y fait, mais je crois que j'ai aussi un problème plus important avec la mise en ligne sur OVH, je vais donc mettre en pause ce topic pour y revenir quand j'aurais une installation cakephp qui fonctionne.
Bonsoir,
je reviens vers vous, ça fait maintenant plusieurs semaines que je suis sur ce problème et je n'ai pas la moindre idée de solution...
Je résume donc :
je développe en local sur MAMP 2.1.3 un projet avec CakePHP 2.4.5 et tout se passe bien (normal c'est en local)
la où ça se complique c'est quand j'upload sur mon mutualisé OVH, j'ai une erreur qui concerne mon model "Locale" qui permet de gérer les différents locales existantes et dispo pour les utilisateurs du site.
Voici l'erreur qu'il me retourne :
Fatal error: Call to undefined method Locale::find() in /homez.764/architheg/www/app/Controller/AppController.php on line 174
le AppController.php (voici les lignes 173, 174 et 175)
$this->loadModel('Locale');
$locales = $this->Locale->find('list', array('order' => 'name ASC', 'conditions' => array('active' => 1)));
$this->viewVars'locales'] = $locales;
Bref, apparemment il ne charge pas le model "locale", et c'est bien ça que je ne comprend pas !
Avez vous déjà rencontré des erreurs avec "loadModel" sur un mutualisé ovh ? ou un probleme avec "loadModel" en général ?
Sinon, peut être avez vous une autre solution pour gérer les locales que celle que j'utilise :
dans la bdd, il y a une table qui contient les locales dispos (1 si dispo, sinon 0) :
en_GB / English (UK) / 1 / So British !
es_ES / Español (España) / 0 / Ôlé !
fr_FR / Français (France) / 1 / Et voilà !
Puis j'utilise un cookie pour savoir quel locale un visiteur non loggé à choisi, si il est loggé je vais lire dans la bdd.
Dans l'AppController je fabrique ma liste des locales dispo, qui seront affichées un peu partout grâce à un element "localesList.ctp" qui contient :
<ul>
<?php foreach ($locales as $k => $locale): ?>
<li>
<?php if ($k == Configure::read('Config.language')): ?>
<?= $locale ?>
<?php else: ?>
<a dir="ltr" href="<?= $this->Html->url(array('controller' => 'locales', 'action' => 'change', 'lid' => $k, 'admin' => false)); ?>" title="<?= $locale ?>"><?= $locale ?></a>
<?php endif ?>
</li>
<?php endforeach ?>
</ul>
Après quand on clique sur tel ou tel lien ca déclenche une action dans le controller "LocalesController.php" qui se charge de changer la valeur de la locale en cours pour ce user dans la bdd et ou de modifier le cookie si il n'est pas loggé.
Voila, j'attend vos suggestions par rapports aux différentes questions soulevées, merci d'avance.