PHP AJAX CRUD: rekordok létrehozása, törlése, szerkesztése a MySQL adatbázisban. Paraméterek kérése PHP-Swagger Scrupulous üzenet hozzáadása php

Áttekintés

A beépített értesítési rendszer, először a Joomlában, lehetővé teszi, hogy az alkalmazás folyamatosan tájékoztassa a felhasználót (vagy felhasználói csoportot) a különféle eseményekről. Tekintse az értesítéseket fontos figyelmeztetéseknek, amelyeket a felhasználó szívesen olvasna, és kövesse nyomon.
Értesítések mindenhol generálhatók. A komponensben vagy a beépülő modulokban, és később megjelenik a JomSocial értesítési rendszerben.
Ez az oktatóanyag megmutatja, hogyan kell, de mivel fogalmunk sincs semmilyen harmadik féltől származó összetevőről, amelyet használhatnánk:) a példákat egy közösségi bővítményen készítjük el, amely az onAfterProfileUpdate eseménynél aktiválódik.
Ha nem tudja, hogyan hozzon létre egy bővítményt, amely aktiválódik ezen az eseményen, javasoljuk, hogy ellenőrizze ezt az útmutatót

Mindenképpen implementálja az összetevőjébe

Amint az oktatóanyag áttekintésében szerepel, értesítéseket generálunk a közösségi bővítmény segítségével.
Valószínűleg értesítéseket szeretne létrehozni az összetevőben vagy a bővítményben. A következő oktatóanyag minden esetben működni fog. Csak azt kell meghatároznia, hogy a kód mely pontján jön létre az értesítés, és csak betöltenie kell a JomSocial Core Libraries fájlt.

igényel_egyszer JPATH_ROOT . "/components/com_community/libraries/core.php" ;

Az alábbiakban ismertetett oktatóanyag követése az Ön bővítményénél is jól működik

Fejlesztési környezet előkészítése

1. Feltételezzük, hogy már létrehozott egy közösségi típusú példa beépülő modult, amely akkor aktiválódik, amikor a felhasználó megváltoztatja a profilját
Ha nem, letöltheti az üres példabővítményt a webhelyről, telepítheti a Joomlába, és engedélyezheti a bővítményt. Meg van nevezve Közösség – Értesítések Példa
2. Navigáljon az adatbázisába, és ürítse ki ezt a két táblát, hogy ne legyenek rekordok

A) prefix_community_notification
b) prefix_community_mailq

3. Legyen legalább két (2) felhasználója a tesztoldalain, és ismerje az azonosítójukat

A Joomla korábbi verzióiban a felhasználói azonosítók mindig meghatározott számtól (62, 42) indultak. A Joomla 3-ban ez a szám véletlenszerű lesz, így a tesztkörnyezetünk képe, mert az Ön végén biztosan más lesz.

Az első értesítés

Nyissa meg a bővítményt php fájl amely a ROOT/plugins/community/example helyen lesz
Az onAfterProfileUpdate() függvényen belül cserélje ki a

CNotificationLibrary::add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

Amint a példában látható, az értesítési hozzáadási API-nak 7 paramétere van

  • $cmd – az értesítés típusa. Ebben a fájlban az összes értesítéstípust láthatja. ROOT/components/com_community/libraries/notificationtypes.php az 53. sortól kezdve, vagy annak környékén. Javasoljuk a system_messaging értesítési típus használatát.
  • $színész – az a személy, aki végrehajtja a cselekvést
  • $célpont – az a személy vagy embercsoport, aki értesítést kap
  • $tárgy – az értesítés tárgya, mind az értesítés felugró ablakában, mind az e-mail címében
  • $body – az e-mail értesítő üzenet törzse
  • $sablon – ha konkrét sablonra van szüksége, itt megadhatja. Ellenkező esetben ez a paraméter üres lehet
  • $params – egyénileg meghatározott paraméterek
  • Mindezek ismeretében határozzuk meg az általunk használt változókat
    Módosítsa a beépülő modul kódját a következőre:

    $user = CFactory::getUser();

    $cmd = "rendszer_üzenetek" ;
    // első paraméter, tevékenység típusa $actor = $user -> id ;

    //második param - $actor azonosítójának lekérése $target = "965" ;

    // harmadik param. Ki kap értesítést? Fejlesztői környezetünkben a 965-ös azonosítójú adminisztrátor. A környezetében valószínűleg az objektumtól vagy a felhasználók tömbjétől szeretné lekérni az azonosítót.


    $subject = "Értesítés tárgya" ;

    // Mindkettő tárgya, e-mail és előugró értesítések $body = ;

    $actor = CFactory::getUser();

    $params = new CParameter("" ) ;

    CNotificationLibrary:: add ( "rendszer_üzenetek" , $actor -> "Ez az értesítés törzsüzenete" , "" , $params ) ;

    Ez sokkal tisztább és könnyebben követhető, miközben alapvetően ugyanazt csinálja, mint a fent bemutatott kód.
    Egyéni értesítési paraméterek

    Az értesítési API bármely hozzáadni kívánt paraméterrel bővíthető.

    • Ezeket a paramétereket e-mail-sablonnak, értesítésnek és természetesen nyelvi fájlnak is át lehet adni. ); $actor = CFactory::getUser();
    • $link = "http://www.google.com" ;
    • $params = new CParameter("" ) ;
    • $params -> set ("actor" , $actor -> getDisplayName () ) ;

    // használható (actor) tagként $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Link az (actor) taghez $params -> set ("url" , $link ) ;// a teljes tevékenység URL-je. Akkor használatos, ha az értesítési ablakban az avatar fölé viszi az egérmutatót. Használható (url) címkeként a kimenő e-mailekben is. Győződjön meg róla, hogy definiálta a $link változót:) CNotificationLibrary:: add ( "rendszer_üzenetkezelés" , $actor -> id , "965" , "Notification Subject" , "Ez az értesítés törzsüzenete" , "" , $params ) ;

    $params = new CParameter(

    - Új params objektumot szeretnénk létrehozni, és adatokat rendelni hozzá anélkül, hogy formálisan osztályt kellene definiálni.
    $params->set("színész", $actor->getDisplayName()); - Az értesítésben mindig szerepelnie kell egy színésznek. Ez a paraméter átadható a sablonnak (aktor) címkeként. Az értesítési ablakban meghatározza a műveletet végrehajtó felhasználót.$params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id);

    CNotificationLibrary:: add ( "rendszer_üzenetkezelés" , $actor -> id , "965" , JText::sprintf ( "PLG_COMMUNITY_EXAMPLE_SUBJECT") , JText::sprintf ( "PLG_COMMUNITY_EXAMPLE_BODY") ; $par

    A nyelvi fájlnak így kell kinéznie

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(színész) frissítette profilját" PLG_COMMUNITY_EXAMPLE_BODY = "Kedves Adminisztrátor \n Ez a levél, hogy értesítsük, hogy (színész) frissítette a profilt \n\n Ha a Google-t szeretné elérni, kattintson ide \n a href=" _QQ_" (url)"_QQ_">(url)"

    Ebben a példában a címkét (actor) és (url) használtuk az adatok átadására mind az értesítési, mind az e-mail sablonoknak. Lássuk, hogy néz ki.
    Az értesítési ablakban, amikor az avatar fölé viszi az egérmutatót, vegye észre az (url) paramétert, és hozzáadja a google-ra mutató linket az avatar fölé. Szándékos, mert mi így csináltuk :)


    ]

    Ugyanabban az ablakban, amikor az egérmutatót a színész linkje fölé viszi. Ez az a rész, ahol (actor) visszhangozta a műveletet végrehajtó felhasználót, míg az (actor_url)" gondoskodott arról, hogy az objektum megfelelően legyen linkelve


    Lássuk, mi történik az e-mail-sorban


    És végül a tényleges e-mail, amelyet a végfelhasználónak küldenek


    Siker
    Eddig három (3) paramétert hoztunk létre, amelyeket sikeresen használunk az értesítési ablakban és az e-mailekben.

  • (actor) – A műveletet végző felhasználó felhasználónevét adja vissza
  • (actor_url) – Megadja a tulajdonsága a (színésznek)
  • (url) – Nem kötelező, de mindig szerepelnie kell az értesítésben. Ez a fő URL-cím, ahol a művelet történt, amelyről értesítést kapunk.
  • Hasonlóképpen meghatározhatja a "

    • (cél) - ha szüksége van rá
    • (cél_url), ha szüksége van rá az értesítésben.
    • (cím) – Általában egy értesítést generáló objektumra utalnak. Példa: "X felhasználó új fényképet tett közzé az Y albumban." Az Y album címe itt
    • (title_url) – A korábbiakhoz hasonlóan az értesítést generáló objektum URL-je.
    • (üzenet) – Ezzel a paraméterrel beállíthatjuk (és visszhangozhatjuk) az üzenetet a JomSocial e-mail szövegében.
    3,3K

    Az üzenetek megjelenítése a felhasználónak meglehetősen gyakori művelet, amelyet egy webalkalmazásnak végre kell hajtania. Előfordulhat űrlapok feldolgozása során, lehetnek hibaüzenetek, olyan üzenetek, amelyek felszólítják a regisztrációt, amikor a felhasználó megpróbál hozzáférni az oldal korlátozott részére, és sok más esetben is.

    Nagyon gyakran az üzenetek létrehozása és kimenete különböző HTTP-kérésekre különül el. Általában kényelmes az átirányítás használata az űrlapok feldolgozása után (a Vissza és a Frissítés gombokkal kapcsolatos problémák elkerülése érdekében), ugyanakkor az üzenet létrehozásának természetes pillanata pontosan az űrlapok feldolgozásának és az azt kísérő műveletek végrehajtásának pillanata. azt. Miért? Képzelje el, hogy az üzenet szövege valahogy így nézzen ki: „Az „Egérpad” tételhez rendelt egységek számát sikeresen módosítottuk 7-ről 12-re. Egy átirányítás után, esetleg funkcionalitás szempontjából teljesen más oldalra, extra fejtörést okoz majd annak meghatározása, hogy mi történt korábban.

    Leggyakrabban üzenetek jelennek meg az űrlapot feldolgozó POST-kérésben - ez nem jó, az „ez az oldal elavult” feliratok tönkreteszik az életet (amikor a felhasználó úgy dönt, hogy megpróbálja a Vissza gombot).

    Valaki átirányítást használ, lemondva a barátságos üzenetekről.

    Ugyanakkor van egy egyszerű és kézenfekvő módszer az élet jobbá tételére. A nyilvánvalóság ellenére valamiért soha nem láttam, hogy bárki is használná – legalábbis amikor mások forrásait néztem.

    Tehát van egy problémánk – az üzenetnek különböző kérésekben kell „élnie”. Szükségünk van egy mechanizmusra, amely az üzenet szövegét átviszi arra az oldalra, amelyen meg kell jelennie. Valószínűleg már emlékszel a foglalkozásokra.

    Igen, általánosságban igazad van. Más módszerek, például egy globális változón keresztül, nem teszik lehetővé az adatok mentését abban az esetben, ha átirányítást használnak (Maxim Naumenko megjegyzése). Ráadásul általában gondoskodom arról, hogy az alkalmazás minden képernyője más információkkal együtt képes legyen megjeleníteni a korábbi képernyőkön generált üzeneteket. Ez azért kényelmes, mert nem kell külön képernyőket készíteni az üzenetek megjelenítéséhez, és a felhasználónak nem kell újra kattintania az egérrel. De valójában a tervezőnek itt kell gondolkodnia - hogy kiemelje azt a területet, ahol az üzenetek megjelennek.

    Az ötlet nagyon egyszerű, és néhány órával megvalósítható.

    Az első dolog, ami eszünkbe jut, egy Üzenet osztály létrehozása, amely valójában egy üzenetet jelentene az egyszerű osztálydiagramunkban. Az üzenetnek képesnek kell lennie arra, hogy elmentse magát a munkamenetben, és megjelenjen a képernyőn.

    class Üzenet ( /** * Üzenet tartalma. */ var $content; /** * Konstruktor az üzenet szövegének inicializálásához. * * @param content message content */ function Message($content) ( $this->content = $ tartalma () ( visszhang. " - " . $this->content .
    "; } }

    A $_SESSION változó a munkamenet eléréséhez használható.

    Vegye figyelembe, hogy a $_SESSION egy tömb, ennek a tömbnek csak egy elemét használjuk a „session_message” indexszel.

    Ebben az esetben egy "tömbök tömbjével" van dolgunk - amit a 'session_message' elemben tárolunk, az egy tömb, ez a továbbított üzenetek listája (természetesen több is lehet).

    Ha nem találja a szálat, ideje felfrissíteni a kézikönyv szekciókkal és tömbökkel foglalkozó részeit.

    Lehet, hogy kérdése van. Miért van szükség ide osztályokra? Két funkcióval is meg lehetne boldogulni. De nézzük tovább. Lehet, hogy üzeneteket kell létrehoznunk a következővel különféle típusok(információ, hiba, figyelmeztetés), meghatározza az üzenet címzettjeit.

    Felhívjuk figyelmét, hogy a pillanatnyilag Nem maga az objektum kerül a munkamenetbe, hanem csak az üzenet szövege. Az OOP lehetővé teszi, hogy később módosítsuk a send() metódus viselkedését anélkül, hogy módosítanánk a metódushoz hozzáférő ügyfélkódot (például a jövőben a teljes Message objektumot írhatjuk a munkamenetbe, ha sok mezője van).

    Képzeljük el, hogy ezt függvényekkel tennénk meg. Valószínűleg lenne egy message_send($txt) függvényünk, és lenne egy message_to_page($txt) függvényünk is. Most hozzá kell adnunk azt a képességet, hogy különböző típusú üzenetekhez eltérő viselkedést biztosítsunk. A függvényhívások változnak: message_send($txt, $fajta), message_to_page($txt, $kind). Az ilyen funkciók kereséséhez át kell fésülnie a teljes alkalmazáskódot, és javítania kell.

    Ez elkerülhető, ha előre látjuk a helyzetet, ha az üzenetet asszociatív tömbként jelenítjük meg: $msg[’txt’], $msg[’kind’], akkor a függvényhívásokban csak egy paraméter lesz. Érzi, hogyan próbál ebből osztály lenni?

    Tehát az OOP lehetőséget ad arra, hogy élvezze azt a luxust, hogy ne gondoljon át mindent előre.

    A következő osztály - az Inbox - éppen erre szolgál.

    class Inbox ( /** * Beérkezett üzenetek tömbje. */ var $messages = array(); /** * A konstruktorban megkapjuk az összes beérkezett üzenetet * és töröljük őket a munkamenetből. */ function Inbox() ( if (is_array($ _SESSION["munkamenet_üzenetek"])) ( $üzenetek = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->üzenetek = new Üzenet($üzenetek[$i]);
    ) ) /* az üzenetek törlése array */ $_SESSION["session_messages"] = array();< $co; $i++) { $this->) /** * A Beérkező levelek tartalmának megjelenítése az oldalon.

    */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Üzenet a rendszertől:

    "; ) for ($i = 0; $i

    üzenetek[$i]->ToPage();

    ) ) )

    Próbáljuk ki az üzenetküldő rendszerünket.

    Hozzunk létre egy nagyon egyszerű példát, amely egy űrlap beküldésére válaszol az aktuális perc másodperceinek számával.

    Az összes munkát elrejtettük tömbökkel és munkamenetekkel az osztályokon belül, és a végső kód egyszerűnek és gyönyörűnek tűnik.
    Hozzon létre egy könyvtárat a webszerveren, majd hozza létre benne ezt a három fájlt, és próbálja ki a szkriptet. Felhívjuk figyelmét, hogy a Vissza és a Frissítés gombokkal nincs probléma. Most képzelje el, hogy egy összetett portált hoz létre, ahol általában több blokk található az oldalakon, és mindegyik tartalmazhat külön alkalmazást. Itt két nehézségbe ütközünk:
    * Szeretném, ha az üzenetek listája megjelenne az oldal egy meghatározott részén, és erre már talált egy jó helyet. A probléma az, hogy a $inbox->toPage() parancsot pontosan abban a pillanatban kell futtatni, amely megfelel az üzenetlista pozíciójának az oldalon. Ha meg akarjuk változtatni ennek a listának a pozícióját, akkor bele kell mennünk a kódba, de ehhez nem jó, ha folyamatosan változtatjuk a portál keretet. A legjobb megoldás
    Lehetne külön modul formájában üzeneteket kiadni, amiről csak annyit tudni, hogy a kerethez kell kötni.

    Vagyis szabaduljon meg a modulok indításának szigorú sorrendje alól. Valóban, mivel az Inbox kimenet eredménye nem függ a rendszer működésétől (on

    Talán még lesz több hasonló (az Inboxhoz hasonló) dolgunk, és pufferrendszert kell létrehoznunk. Annak érdekében, hogy ne keverjük össze, kinek a kimenete, valószínűleg el fogunk jönni a pufferek elnevezéséhez. Valahol eltároljuk a pufferek kimeneti sorrendjét - lehetőleg egy külső fájlban, hogy megkönnyítsük a változtatásokat.

    Ez a megoldási kísérlet már azt az ötletet ad nekünk, hogy az XML-t használjuk köztes adatok tárolására. Az XSLT stílusok használata pedig segít megoldani a második problémát.

    Nem foglalkozom azzal, hogy mi az XML és mi az XSLT. Ha nem ismeri ezeket a dolgokat, a zvon.org jó hely a keresés megkezdéséhez.

    Az ötlet az, hogy a toPage() metódusokban ne HTML kódot állítsunk elő, hanem XML struktúrát. Az oldaldokumentum egy karakterláncként jön létre XML kóddal ("pufferként" fog szolgálni), a szkript utolsó szakaszában pedig XSL transzformációt fogunk használni.

    Először képzeljük el, mi legyen a kód fő részének eredménye.

    perc 57 másodperc: 45

    Hogy mi ez, azt nagyon könnyű kitalálni – két üzenet és egy űrlap. Kérjük, vegye figyelembe, hogy a PHP szkriptnek csak egy ilyen karakterláncot kell elkészítenie - ez nagyon egyszerű. Ezenkívül a fő címkék sorrendje nem fontos - például elhelyezheti őket az elejére, ahogy az a programozó számára kényelmes lesz. Hogyan kell megvalósítani. Anélkül, hogy bármit megváltoztatnánk, használhatunk kimeneti pufferelést, XML-t írhatunk ki HTML kód helyett, és a végén egyszerűen rögzíthetjük a kimenetet egy karakterláncban. De akkor elveszítjük a rugalmasságot – például néha a hibakeresési információkat közvetlenül az oldalra kívánja kiadni (visszhang használatával). Egy időben, PHP fejlesztők olyan DOM-modulon dolgoznak, amely fejlettebb módszert kínál a fa dokumentumok létrehozására és átadására. Ha a DOM-ot szeretnénk megvalósítani, akkor a teljes alkalmazást újra kell terveznünk, a karakterláncok kimenetét DOM elemek létrehozására módosítva. Ezért jobban szeretem az objektumok XML reprezentációját magukon az objektumokon belül tárolni, szekvenciálisan összeállítva egy közös XML dokumentumot. Nem olyan nehéz, csak egy kis módosításra szorul. Látni fogja, hogy ez a technika nincs szigorúan az XML-adatok tárolásának egy meghatározott módjához kötve, és ez lehetővé teszi, hogy csekély költséggel áttérjen a DOM használatára. Először is vegyük észre, hogy minden objektumunk rendelkezik egy toPage() metódussal. Ez a hasonlóság elgondolkodtathat egy új közös szülőosztály bevezetésén. Hagyja, hogy minden osztály, amely egy oldalhoz XML-dokumentumot tud létrehozni, örököljön egy osztálytól, amely gondoskodik az objektum XML-reprezentációjáról. Nevezzük Outputable-nak.

    class Kiadható ( /** * XML tároló (karakterlánc). */ var $output = ""; /** * Adja meg a tároló tartalmát, és törölje a tárolót. * * @return egy karakterláncot XML adatokkal */ függvény getOutput () ( $ out = $this->output; $this->output = ""; return $out; ->output .= $string . "n" ) /** * "Absztrakt" metódus */ function toPage( ) ( ) )

    A toPage() metódus üressé válik - ebben az esetben szükség van arra, hogy jelezze, hogyan kell a külső „matryoshka” osztályoknak kommunikálnia a belső osztállyal. Itt azonban kínálhatnánk egy alapértelmezett megvalósítást, ha észrevennénk, hogy sok olyan objektum van, amely ugyanúgy jelenik meg az oldalon.

    A Message és a Beérkezett üzenetek osztályok kissé módosulnak – mostantól mindkettőnek öröklődik az Outputable-ból, és a toPage() metódus is megváltozik
    Üzenet.php

    osztály Üzenet kiterjesztése Kimeneti ( /** * Üzenet tartalma. */ var $content; /** * Konstruktor az üzenet szövegének inicializálásához. * * @param tartalom üzenet tartalma */ függvény Üzenet($content) ( $this->content = $content; ) /** * Üzenet írása a session-be */ függvény send() ( $_SESSION["session_messages"] = $this->content; ) /** * Üzenet kiírása az oldalra this->appendOutput("".$this->content."" ) )

    class Inbox extends Outputable ( /** * Beérkezett üzenetek tömbje. */ var $messages = array(); /** * A konstruktorban megkapjuk az összes beérkezett üzenetet * és eltávolítjuk őket a munkamenetből. */ function Inbox( ) ( if (is_array ($_SESSION["munkamenet_üzenetek"])) ( $üzenetek = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->üzenetek = new Üzenet($üzenetek[$i]);< $co; $i++) { $this->) ) /* az üzenetek törlése array */ $_SESSION["session_messages"] = array();

    ) /** * A Beérkező levelek tartalmának megjelenítése az oldalon.

    */ függvény toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i
    üzenetek[$i]->ToPage();

    $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput("");) )

    A kimeneti mód megváltozott - a külső megjelenítés helyett a közvetlenül az oldalra történő kiadás helyett egyelőre a Outputable-ban van eltárolva, amely minden objektumban „ül”. Az appendOutput() metódus az echo() konstrukció helyettesítésére szolgál. Egy objektum kimenetének lekéréséhez a getOutput() metódust használjuk.

    Most nézzük meg, mi a kód kliens része, ami ugyanazt a problémát oldja meg, mint korábban.
    index.php

    A fő újítás a $global_content objektumban van, melynek neve önmagáért beszél. Ebben az esetben az Outputable osztályba tartozik, in

    valódi problémákat

    valószínűleg külön osztályt hoz létre az oldal tartalmához.

    Ha alaposan megnézi, a szkript tartalma gyakorlatilag nem változott - ugyanaz a postafiók, ugyanaz a toPage(). Hozzáadott egy utasítást, amely megjeleníti az üzenetlista tartalmát az oldal tartalmában. A változatosság kedvéért most két üzenet jön létre.

    Az eredmény megtekintéséhez már csak az XSL sablon elkészítése van hátra.

    Egy másik előny a könnyű hibakeresés. Ha futtatja a szkriptet, észre fogja venni, hogy minden oldal tartalmaz hibakeresési kimenetet – egy XML-prototípust, amely nagyban leegyszerűsíti az alkalmazások hibakeresőjét.

    Még valami, amire gondolnia kell, az az üzenetobjektumok létrehozása. Nem mindig kényelmes az újat közvetlenül az ügyfélkódban használni. De talán ez egy külön cikk témája.

    Végül egy galopp a kilátásokról:

    * Előugró ablakok a fontos üzenetek listájához
    * "feladó oldalak" és "céloldalak" az üzenetekben
    * Üzenetek naplózása az adatbázisban
    * gomb "műveleteim előzményeinek megjelenítése"
    * a felhasználói műveletek statisztikai elemzése a munkameneteken belül
    * "intelligens asszisztensek" a webes alkalmazásokban

    Zend alkalmazásomban írok egy kis API-t mobil alkalmazások. A mobilfejlesztők dolgának megkönnyítése érdekében a Swaggert használom. Eddig minden jól működik, kivéve egy GET kérést.

    Mikor hívjam fel a /user/messages/(sessionToken) címet? NumMessages = (numMessages) & pageNr = (pageNr) a böngészőben, a kívánt eredményeket kapom, de amikor megpróbálom hagyni, hogy a Swagger végrehajtsa ezt a kérést, csak a sessionToken kerül átadásra. Kipróbáltam ezeket a megjegyzéseket a Swaggerhez:

    /** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" Lekéri az üzeneteket, * notes="", * type="string", * becenév="getUsermessagesPaged", * authorizations=(), * @SWG\Parameter(* name="sessionToken", * description="A token aktív felhasználói munkamenetből", * kötelező=true, * type="string", * paramType="útvonal", * allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" üzenetek száma az oldalon (a numMessages & pageNr figyelmen kívül hagyja, ha nincs mindkettő beállítva)", * kötelező=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="oldalszám (az üzenetek száma és az oldalszám figyelmen kívül marad, ha nincs mindkettő beállítva)", * kötelező=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (üzenetek => "felhasználói_üzenetek")"), * @SWG\ResponseMessage(code=400, message="json hibával: "nincs bejelentkezve"" ) *) *) */

    Látja valaki a hibámat?

    Bármilyen segítséget szívesen fogadunk.

    Őszintén

    Frissítés. A javaslatnak megfelelően mindkét paramType-ot megváltoztattam "query"-re, és megváltoztattam az elérési utat:

    @SWG\Api(útvonal="/felhasználó/üzenetek/(sessionToken)",

    de nem harcosként dolgozott.

    Az xdebug in eclipse PDT a következőket mutatja:

    RequestURI => /ias/public/user/messages/(sessionToken)

    QueryParams => Zend\\Stdlib\\Parameters - *ArrayObject*tárhely => Tömb - =>

    swagger JSON:

    ( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "útvonal": "\/user", "description": "Műveletek a felhasználókkal kapcsolatban" ) ], "információ" : ( "title": "Mobil hozzáférési API", "description": "Ez az xxx mobil hozzáférési api.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "megjegyzés": "\/**\ * @SWG\\Info(\ * title="Mobil hozzáférési API",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

    Íme a /user kimenet:

    ( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "útvonal": "/user/balance/(sessionToken)", "műveletek": [ ( "method": "GET", "summary": "Felhasználói mérleg lekérése", "becenév": "getUserdata", "type": "string", "parameters": [ ( "paramType": "útvonal", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "A token egy aktív felhasználói munkamenetből" ) ], "responseMessages": [ ( "code": 200, "message": "json (balance => "user_balance")" ), ( "code": 400, "message" ": "json "nincs bejelentkezve"" ) ], "jegyzetek": "", "jogosultságok": () ) ]), ( "útvonal": "/felhasználó/bejelentkezés", "műveletek": [ ( "method": "POST", "summary": "Logs user a rendszer", "becenév": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "e-mail", "type": "string", " kötelező": igaz, "allowMultiple": hamis, "description": " A felhasználó email for login" ), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": false, "description": "A jelszó egyszerű szöveges bejelentkezéshez" ) ], "responseMessages": [ ( "kód": 200, "message": "json with session_id, user_id, user_balance" ), ( "code": 400, "message": "json with hiba "nincs felhasználó megadott e-mail-címmel és jelszóval"", ( "kód": 400, "üzenet": "json hibával "invalid input"" ), ( "kód": 400, "message": "json hibával " nincs bejegyzés kérés"" ) ], "jegyzetek": "", "engedélyek": () ) ]), ( "elérési út": "/felhasználó/kijelentkezés", "műveletek": [ ( "módszer": "POST " , "summary": "Kijelentkezés a felhasználóból", "becenév": "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", " type": "string", "required": true, "allowMultiple": false, "description": "A token aktív felhasználói munkamenetből" ) ], "responseMessages": [ ( "kód": 200, "üzenet" ": "json (eredmény => "törölt")" ), ( "kód": 400, "üzenet": "json hibával "nincs felhasználói_munkamenet adott sid-vel"" ), ( "kód": 400, "üzenet" : "json with error "invalid input"" ), ( "code": 400, "message": "json with error "no post request"" ) ], "notes": "", "engedélyek": () ) ] ), ( "útvonal": "/felhasználó/üzenetek/(sessionToken)", "műveletek": [ ( "módszer": "GET", "összegzés": "Új üzenetek beolvasása", "becenév": "getUsermessages" , "type": "string", "parameters": [ ( "paramType": "útvonal", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false , "description": "A token aktív felhasználói munkamenetből" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code" : 400, "message": "json with error "nincs bejelentkezve"" ) ], "notes": "", "engedélyek": () ), ( "method": "GET", "summary": "Gets" üzenetek lapozva", "becenév": "getUsermessagesPaged", "type": "string", "parameters": [ ( "paramType": "elérési út", "név": "sessionToken", "type": "string", "required": true, "description": "A token aktív felhasználói munkamenetből" ), ( "paramType": "query", "name": "numMessages", "type": "string", "required": true, "description": "üzenetek száma az oldalon (a numMessages & pageNr figyelmen kívül hagyja, ha nincs mindkettő beállítva)" ), ( "paramType": "query", "name": "pageNr", "type": "string ", "required": true, "description": "pagenumber (a numMessages & pageNr figyelmen kívül hagyja, ha nincs mindkettő beállítva)" ) ], "responseMessages": [ ( "code": 200, "message": "json (üzenetek) => "user_messages")" ), ( "code": 400, "message": "json with error "nincs bejelentkezve"" ) ], "notes": "", "engedélyek": () ) ] ), ( "útvonal": "/felhasználó/felhasználói adatok", "műveletek": [ ( "módszer": "POST", "összegzés": "Felhasználói adatok bejegyzése", "becenév": "postUserdata", "type": "karakterlánc" , "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "A token aktív felhasználói munkamenetből" ), ( "paramType": "form", "name": "password", "type": "string", "required": false, "allowMultiple": false, "description": " új jelszó" ), ( "paramType": "form", "name": "cím", "type": "string", "required": false, "allowMultiple": false, "description": "új cím" ), ( "paramType": "form", "name": "housenr", "type": "string", "required": false, "allowMultiple": false, "description": "new housenr" ), ( "paramType": "form", "name": "zip", "type": "string", "required": false, "allowMultiple": false, "description": "new zip" ), ( "paramType" : "form", "name": "city", "type": "string", "required": false, "allowMultiple": false, "description": "new city" ), ( "paramType": "forma" ", "name": "e-mail", "type": "string", "required": false, "allowMultiple": false, "description": "new email" ) ], "responseMessages": [ ( "kód" : 200, "message": "json (user => "userdata")" ), ( "code": 400, "message": "json with error "nincs bejelentkezve"" ) ], "notes": "" , "engedélyek": () ) ]), ( "útvonal": "/user/userdata/(sessionToken)", "operations": [ ( "method": "GET", "summary": "Gets userdata", "nickname": "getUserdata", "type": "string", "parameters": [ ( "paramType": "útvonal", "name": "sessionToken", "type": "string", "szükséges": true, "allowMultiple": false, "description": "A token aktív felhasználói munkamenetből" ) ], "responseMessages": [ ( "code": 200, "message": "json (user => "userdata", user_limit => "userLimits")" ), ( "code": 400, "message": "json hibával "nincs bejelentkezve"" ) ], "notes": "", "engedélyek": () ) ] ) ], "produces": [ "application/json" ] )

    Hibának tűnik, hogy a swagger-ui-m nem küld semmilyen kérési paramétert? Íme egy példa egy lekérdezési paraméterrel, sessionToken: (FireBug 2.0.6 által vezérelve)

    GET /ias/public/user/balance HTTP/1.1 Gazda: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Elfogadás: application/json Accept-Language: de, hu-US;q=0.7,en;q=0.3 Kódolás elfogadása: gzip, deflálás Tartalom típusa: application/json Hivatkozó: http://localhost/ias/swagger/ Cookie: __utma=111872281.581414660.13667189373713 0,255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Kapcsolat: életben tartás

    A válasz ez volt:

    HTTP/1.1 400 hibás kérés dátuma: kedd, 2014. november 25. 14:58:20 GMT Szerver: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 Tartalom-hossz: 25 Csatlakozás: bezárás Tartalomtípus: application/json; charset=utf-8

    A válasz helyes volt, mert egyetlen sessionToken sem került átadásra.

    Ez munkát igényel, de nem a swagger-ui-ból származik:

    GET /ias/public/user/balance?sessionToken=HTTP/1.1 Gazdagép: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Elfogadás: text/html,application/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: __utma=111872281.581414660 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Kapcsolat: életben tartás

    Végül rájöttem: a feleségednél jobbat nem találhatsz. Már csak feleséget kell keresni

    PHP AJAX CRUD: rekordok létrehozása, törlése, szerkesztése a MySQL adatbázisban

    Ebben a cikkben megtudjuk, hogyan adhat hozzá, szerkeszthet és törölhet rekordokat egy MySQL adatbázisban PHP használatával. JQuery kezelőt használtunk, amely AJAX kérést küld egy szerveroldali szkriptnek. A kezelő frissíti a rekordok listáját.

    AJAX űrlap létrehozási, törlési, szerkesztési kérelmek küldéséhez

    Rekord hozzáadásakor az űrlap elküldi PHP adatok szkriptet AJAX kéréssel. Ha a hozzáadás sikeres, a bejegyzések listája újra betöltődik.

    JQuery AJAX függvények CRUD adatbázis-lekérdezéshez

    IN jQuery függvények AJAX van egy kapcsoló esetek szerkesztés és törlés hozzáadása. Ezek az esetek az adatbázis-műveletektől függően különböző lekérdezési és válaszadat-karakterláncokat generálnak.

    függvény showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) függvény cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(message); $("#frmAdd").show(); függvény callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ("add" : queryString = "action="+action+"&txtmessage="+ $("#txtmessage").val(); ="+ $("#txtmessage_"+id).val(); break; case "delete": queryString = "action="+action+"&message_id="+ id; break; ) jQuery.ajax(( url: " crud_action.php", data:queryString, típus: "POST", siker:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break ; case "edit": $("#message_" + id + " .message-content").html(data("#frmAdd").show();

    PHP szkript a CRUD műveletekhez

    A következő kód lekérdezéseket hajt végre az adatbázisban. Ez a PHP-szkript egy CRUD-művelet végrehajtása után frissíti a rekordokat az AJAX-válasz eredményeként.

    request_once("dbcontroller.php"); $db_handle = new DBController(); $akció = $_POST["akció"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(message) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo " Edit Delete " . $_POST["txtmessage"] . " "; ) break "edit": $result = mysql_query("UPDATE comment set message = "".$_POST["txtmessage"]."" WHERE id=".$_POST["message_id"]); if($eredmény) echo $_POST["txtmessage"]; break; kis- és nagybetű "delete": if ( !empty($_POST["üzenetazonosító"])) ( mysql_query("DELETE FROM FROM WHERE id=".$_POST["üzenetazonosító"]); ) break) )