CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

CakePHP

Fire_Storm
Fire_Storm
Niveau 10
02 octobre 2013 à 20:25:14

Salut.

Pour ne pas trop éparpiller mes questions, je crée un topic mais sur CakePHP cette fois.

Déjà de base il me semble plus simple à comprendre que Symfony (on chipote beaucoup moins avec des fichiers de configurations etc) même si la syntaxe me semble un brin bizarre (alors que celle de Symfony au contraire était on ne peut plus claire).

Par contre là où j'ai vraiment du mal c'est sur le modèle. Dans Symfony2 on a 2 choses; l'entité (qui permet d'hydrater et manipuler un objet, donc getter setter etc) et un repository qui en gros sont les requêtes "personnalisées" (Doctrine disposant de quelques méthodes de bases mais loin d'être suffisant quand on veut aller plus loin).

Ici déjà j'ai l'impression que le terme entité n'existe tout simplement pas; aucun getter ni setter (c'est peut être pas une norme mais j'ai toujours été habitué à faire des $objet->getTruc, $objet->setTruc). Pour reprendre un exemple classique ici j'ai des articles, évidemment comme tout bon article qui se respecte j'aimerai pour voir le commenter. J'ai donc une relation entre article et commentaires (donc d'après ce que j'ai compris hasMany du coté article (un article, plusieurs commentaires) et belongsTo du coté commentaire (un commentaire appartient à un article).

Là où ça coince c'est qu'on explique que pour récuperer le modèle il suffit de faire $this->Objet (c'est en rapport avec le nom de la classe donc ici par exemple class Objet). Or là je veux utiliser dans le contrôleur des articles une méthode se trouvant dans le modèle Comment. Et là je ne trouve pas comment récuperer ce fichu modèle (car la classe de récupération des commentaires doit pour moi se trouver dans le modèle des commentaires, pas dans celui des articles). Et comment gérer les relations ? (avec Doctrine c'est via une annotation qui fait le lien entre les tables mais ici ?)

Une autre question c'est que j'ai vu qu'il y avait certaines implémentées (find, findById etc). Dans Symfony, Doctrine mettait à disposition toute une panoplie de méthodes pour faire ses propres requêtes (des trucs du genre orderBy, limit, andWhere etc) -> ici je trouve ... que dalle. Les méthodes du genre findById c'est cool mais c'est loin d'englober tout les cas (pour rester dans l'exemple imaginons que je veux récupérer tout les articles d'un certain auteur et qui ont été publiés entre 2 dates. Je n'ai pas de méthodes toute faite pour ça, donc il faut que je la crée dans mon modèle mais je ne pige pas comment).

Dernière question pour cette première approche de CakePHP; les routes. D'après ce que je l'ai les routes sont crées en fonction du nom du controller, de l'action et des variables passées donc en gros si vous avez la méthode view() dans la classe ArticlesController avec la variable 1 la route sera du genre: /articles/view/1. C'est bien joli mais moi j'aimerai par exemple une url comme ceci: /cequejeveux/slug-de-l-article -> est t-il possible d'avoir un vrai routeur, c'est à dire de pouvoir définir soi-même la route indépendament du nom de la méthode ou autre (ce qui est franchement moche et pas super ergonomique au début, de plus ça sous-entend qu'en tapant le bon nom de méthode dans l'url on peut via ce moyen l’exécuter et je trouve pas ça top top).

Bref j'imagine que tout ça a certainement une réponse mais j'avoue que j'ai été un peu surpris de certains aspects (autant certains points je les trouvent assez clair, autant d'autres sont au contraire assez flou pour le moment. Faut que la pièce tombe comme on dit ^^)

Merci d'avance.

Fire_Storm
Fire_Storm
Niveau 10
18 octobre 2013 à 12:10:32

Salut.

M'étant récemment mis à CakePHP (en suivant les tutos de Grafikart qui m'ont bien aidé à répondre aux questions ci dessus) je me suis donc lancé dans un petit site web pour mettre en application ce que j'ai appris jusqu'ici... et je coince déjà ^^'

Grosso modo le site que je veux faire est un mini-deviantart; des utilisateurs qui postent des photos allant dans une catégorie, puis j'aimerai faire un système de vote (1 vote par jour par photo par exemple).

Là où je bloque un peu c'est sur le formulaire de connexion. J'ai souvent pour habitude d'en dédier une page mais là j'ai une barre en header qui sera présente tout au long de la partie frontend du site.

Dans le tuto on a créé un contrôleur spécifique, j'ai fait de même pour les utilisateurs mais ici la connexion doit se faire sur la partie frontend du site (qui n'est pas dans mon contrôleur Users) ET peu importe où l'on est on doit pouvoir se connecter via cette barre (comme sur deviantArt) et là très honnêtement j'ai beaucoup de mal à visualiser ce que je dois faire et surtout où. Pour moi la connexion doit se faire du coté de l'utilisateur mais le contrôleur qui gère la partie frontend est le contrôleur "photos". De plus lorsque je soumets le formulaire il me rétorque que la vue "login.ctp" n'existe pas (vu que dans CakePHP l’exécution d'une action renvoit sur la vue de celle ci, après j'imagine qu'il me suffit de spécifier la vue que je veux en paramètre (cette barre est dans le layout principal vu qu'elle se retrouve sur toute les pages du site).

Dans Symfony2 on aurait probablement chargé le repository qui nous intéresse mais ici je n'ai pas vraiment l'impression que ça marche ainsi (où j'ai dû surement louper un truc)

Pour le moment j'ai mes contrôleurs Photos, Users, et Categories et la méthode de login est dans User (via le composant Auth).

J'ai une petite base en POO mais sur ce coup là j'avoue que CakePHP me désarçonne un peu. ^^

Si quelqu'un sait éclairer ma lanterne ça serait sympa. ^^

Merci d'avance

deepblue
deepblue
Niveau 16
18 octobre 2013 à 16:00:14

https://upload.deblan.org/u/2013-10/52613ee6.png

deepblue
deepblue
Niveau 16
18 octobre 2013 à 16:07:52

Btw, Composants pourrait devenir "Page", ainsi :
Composants::header() :d) Page::header()
Composants::links() :d) Page::navigation()

Fire_Storm
Fire_Storm
Niveau 10
18 octobre 2013 à 17:45:32

Finalement j'ai résolu le soucis; en fait quand on crée un formulaire dans la vue on peut lui préciser en paramètre un tableau précisant le contrôleur et l'action sur laquelle il doit pointer.

J'ai tout de même fait une page à part pour la connexion (sinon fallait passer par de l'ajax pour éviter le rechargement de page).

Sinon petite question qui n'a pas vraiment avoir avec CakePHP mais plus un problème de conception; si je veux qu'un utilisateur puisse voter pour autant de photos qu'il veut mais une fois par jour par photo; vaut il mieux que je stocke dans la table de liaison (puisque ça se rapporte à la fois à l’utilisateur et à la photo selon un critère, ça ne peut se trouver qu'entre les 2) la date du dernier vote (donc on aurait l'id de l'utilisateur, l'id de la photo et la date du dernier vote) ou alors par exemple enregistrer un arbre XML (ou autre truc du genre) dans un champ de l'utilisateur la liste des photos pour laquelle il a voté (et la date. Plus chiant à faire mais ça tient dans un seul champ sauf je ne suis pas sûr que ça soit vraiment correct schématiquement parlant).

deepblue
deepblue
Niveau 16
18 octobre 2013 à 20:53:49

Une table d'association :
- photo_id
- user_id
- date

Le couple photo_id/user_id étant la clé primaire.

Ça te suffit pour faire ce que tu veux :
- qui a voté pour quelle photo
- tu sais quand

Fire_Storm
Fire_Storm
Niveau 10
30 octobre 2013 à 10:30:15

Je m'attaque à ce système de vote mais j'avoue bloquer un peu sur le choix de la relation sachant que;

Un utilisateur vote pour autant de photos qu'il veut mais une fois par jour par photo. Et une photo peut évidemment recevoir autant de vote qu'elle veut.

Au départ je pensais à une relation hasAndBelongsToMany mais j'en suis plus si sûr.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment