2010-03-17 15 views
1

Quelqu'un peut-il recommander une bonne classe d'appel de PHP?php classe d'appel

J'ai cherché google, mais ne l'ai pas vu quelque chose qui correspond à mes besoins. Plutôt que de «rouler le mien» (et réinventant presque sûrement la roue), j'ai décidé de vérifier ici en premier.

Tout d'abord quelques arrière-plan:

Je développe un site Web en utilisant Symfony 1.3.2 Propel ORM sur Ubuntu 9.10. J'utilise actuellement le téléavertisseur Propel, qui est OK, mais j'ai récemment commencé à utiliser memcache pour accélérer les choses un peu. À ce stade, le pager Propel est peu utile, car il (AFAIK), ne fonctionne qu'avec des objets Propel.

Ce que je dois est une classe e: t répond aux requirents suivants

  1. possède une interface propre, avec séparation des préoccupations, de sorte que la logique pour récupérer les enregistrements de la source de données (par exemple, base de données) est encapsulé dans une classe (ou au moins un fichier séparé).

  2. peut travailler avec des tableaux d'objets

  3. Fournit des liens de pagination, et va chercher uniquement les données nécessaires à la page en cours. En outre, la pagination devrait «séparer» les liens de page disponibles s'il y en a trop. Par exemple, s'il y a potentiellement 1000 liens de page possibles, les pages affichées doivent être quelque chose comme FIRST 2,3 .... 999 LAST

  4. Peut renvoyer le numéro de tous les enregistrements de la table interrogée, afin que les liens suivants sont disponibles FIRST, LAST (cette exigence est en fait déjà couverte dans l'exigence précédente - mais je voulais juste la souligner de nouveau).

Quelqu'un peut-il recommander une telle bibliothèque, si elle l'a déjà utilisée avec succès?

Alternativement, someobe peut avoir « piraté » (par exemple dérivé) du pager courant Propel, pour lui faire faire des choses que j'énuméré à propos - s'il vous plaît laissez-moi savoir.

+0

qu'est-ce qui ne va pas avec la classe 'sfPropelPager'? – develop7

+0

@ develop7: Voir la condition 2 (spécifiquement, je veux travailler avec des objets qui peuvent ne pas être des objets Propel). Le problème est en fait lié à l'utilisation de memcache avec un pager. (AFAIK) sfPropelPager semble être incapable d'être fourni avec un ensemble d'objets (disons extraits du cache), puis de travailler avec ces objets à la place. –

+0

Donc, vous voulez mettre en cache les objets hydratés? – develop7

Répondre

0

Je l'ai utilisé et recommander le paquet PEAR::Pager qui est capable de faire ce que vous avez besoin.

+0

Cela semble intéressant. Je vais devoir voir quel effort (le cas échéant) est nécessaire pour l'obtenir pour faire ce que je veux, ET pour jouer bien avec Symfony –

2

Je ne sais pas si ce sera parfait, mais les deux sfPropelPager et sfDoctrinePager étendre de la classe sfPager, qui fournit le mouvement vers l'avant/arrière et la pagination, etc. Vous devriez pouvoir utiliser soit sfPager directement, ou de prolonger de celui-ci dans la De la même manière que Doctrine et Propel font avec votre tableau d'éléments pour fournir la pagination. Généralement, comme cela semble être un cas d'utilisation "non standard", il n'y a pas de document sur le site Symfony à ce sujet, sauf pour la documentation de l'API, mais les documents API sont assez complets, et je suis sûr que Les exemples de Doctrine/Propel sauront vous guider dans la bonne direction!

+0

richsage: J'ai voté votre réponse. C'est probablement la façon dont je finirai par aller (en augmentant sfPager), s'il n'y a pas de classes shell disponibles. Je sais qu'il y a des pcakages comme Pear, etc., mais le faire ce que je veux faire serait juste aussi long que le prolongement de la classe sfPager - et au moins je reste dans le framework SF –

+0

Merci pour l'upvote :-) Ouais c'est ce que je visais - le tout-garder-dans-symfony, surtout s'il y a une classe que vous pouvez utiliser comme base! – richsage

0

Vous devez descendre dans le code sfPropelPager (ou sfPager directement), comprendre comment cela fonctionne en interne, où les données dynamiques sont utilisées et comment vous pouvez le faire fonctionner avec memcache.

Je ne sais pas, mais memecached ne peux pas vous cache propulser directement les enregistrements?(Je sais qu'ils sont énormes: D)

Mon point de réponse au point:

1: sfPager est DB agnostique tel qu'il est utilisé à la fois par sfDoctrinePager et sfPropelPager, vous pouvez l'utiliser pour un travail et une base testée . 2: sfPager doit fonctionner avec les tableaux, la propriété de classe modèle référencée dans ce tableau n'est utilisée nulle part. 3: Fournir des liens de pagination est contre la séparation des préoccupations, il pagine sur les objets et les liens sont générés ailleurs (voir le fichier, assistant, etc.). Vous pouvez les afficher comme vous le souhaitez sans acteur de modification de la classe pager ou ses descendants

4: premier et dernier accès sont fournis par sfPager classe

Je sais que je peux paraître comme prédicateur de symfony, mais c'est la façon dont nous habituellement od les choses qui travaillent avec un tel cadre. Comme vous l'avez écrit, ne réinventez pas la roue!