Bonjour à tous,

J'ai deux applications qui sont sur deux sous domaines différents mais qui utilisent la même base de données.

J'ai donc une table Users avec une photo de profil. Je stocke l'extention de la photo et la renomme avec l'id de l'utilisateur. Je la déplace dans un dossier photos qui est dans img.

Les photos sont donc sur un des deux sous domaine et je fait donc appel à ces images via l'url complete du sous domaine où elles sont stockées.

Ca ne me semble pas très propre mais je ne sais pas trop ce que j'ai comme alternative.

Mon plus gros problème est : je peux éditer un profil via les deux applications, donc sur la première où sont stockées les photos pas de problème. Mais sur la seconde, je doit déplacer les photos sur un autre sous domaine. Et c'est la que ça coince ..

Quelqu'un a une idée de comment je pourrait organiser tout ça ?

Merci beaucoup :)

Bryan

11 réponses


zkiller
Réponse acceptée

chemin absolu tu peut faire pointer en remontant de dossier :P

connected
Réponse acceptée

Bonjour,

dans ton cas si tu es sur le même serveur, effectivement il te suffirait soit :

  • de mettre ton chemin d'upload absolu dans ton bootstrap.php
    Configure::write('Upload.path', '/home/.../upload/shared');
  • de créer un lien symbolique vers le répertoire pour chaque site

Enfin, dernière solution qui serait pas si itu avais deux serveurs distincts, c'était de passer par le cloud d'amazon (payant), ou bien dropbox (gratuit jusqu'à 2 Go). L'idée avec Dropbox c'est comme sur un PC classique tu as un repertoire sur ton serveur qui pointe vers ton Drop et qui se synchronise. Il te suffit du coup de l'installer sur chacun de tes serveurs, dans le répertoire de ton choix. Même pas beson de jouer avec la config ni rien, c'est un vrai répertoire.

Bon courage à toi.

connected
Réponse acceptée

Il te suffit de supprimier les règles dont tu n'as pas besoin :

$this->validator()->remove('champnonpresent1');
$this->validator()->remove('champnonpresent2');
$this->validator()->remove('champnonpresent3');

Pk ne pas faire un dossier commun aux 2 apps ?

bryou16
Auteur

Salut,

oui mais que je stockerais ou du coup ? parce que je n'ai pas essayé mais je peux faire un move dans une url autre que celle de mon fichier qui se charge du move ?

Tu peux mettre ça dans un dossier extérieur au dossiers des projets, les 2 apps sont sur le meme serveur ?

bryou16
Auteur

Yep, même serveur, sous domaines différents. Et du coup comme je pointe les sous dom sur les dossiers webroot, j'ai pas d'endroit commun aux deux apps.

bryou16
Auteur

D'accord, mais c'est correct d'organiser ça comme ça ?

Bonsoir.
Étant donné que tu ne l'as pas précisé, je suppose que ça concerne la V2.
Vu que je n'ai pas testé, je ne peux pas te certifier que ce serait fonctionnel, mais sait-on jamais.
Tu pourrais utiliser ceci : Chemins de Classe Supplémentaires.
Je ne donne pas de précision supplémentaire étant donné que la documentation explique correctement et ce système te permettrait de pouvoir partager plusieurs fonctionnalités entre tes deux applications.
Comme ça, tu pourras par exemple créer ton système d'upload pour qu'il soit partagé par tes deux applications.

bryou16
Auteur

Merci, je vais essayer tout ça.

Autre petite question qui concerne également l'upload, j'ai un formulaire ou j'ai entre autre l'upload, mais aussi des informations d'un autre modèle, donc je save avec un saveAssociated. Tout fonctionne bien mais uniquement quand je met la validation à false.

Dans mon modèle j'ai des règles de validation qui ne concerne pas ce formulaire, je suis donc obligé d'indiqué quel champ je veux valider et voici commment j'ai mis en place ça :

// Si il y a une photo de profil chargée alors on la valide sinon on valide que les autres champs
            if (!empty($this->request->data['User']['photo_file']['tmp_name'])) {

                $this->User->validates(array('fieldList' => array('adresse', 'code_postal', 'ville', 'photo_file')));

            }
            else{

                $this->User->validates(array('fieldList' => array('adresse', 'code_postal', 'ville')));

            }

            // On sauvegarde
            if ($this->User->saveAssociated($this->request->data, array('validate' => false))) 
            {
                // Confirmation
                $this->Session->setFlash(__('Votre profil a bien été mis à jour.'));

                return $this->redirect(array('action' => 'my_informations'));

            }

Dans l'éxemple donné, si je met la validation à true il me check toutes les règles, et évidemment il y en a qui n'existe pas dans ce formulaire. Comment je peux appliquer mon $this->User->validates qui est dans ma condition ?

bryou16
Auteur

Ca fonctionne ! Merci tout le monde :)