Rigoureuze bericht toevoegen php. PHP AJAX CRUD: records aanmaken, verwijderen, bewerken in de MySQL-database. PHP-script voor CRUD-bewerkingen

Overzicht

Dankzij het ingebouwde notificatiesysteem, als eerste ooit in Joomla, kan uw app de gebruiker (of groep gebruikers) op de hoogte houden van verschillende gebeurtenissen. Beschouw meldingen als belangrijke waarschuwingen die de gebruiker graag zou willen lezen en bijhouden.
Meldingen kunnen overal worden gegenereerd. In uw component of plug-ins en later weergegeven in het JomSocial-meldingssysteem.
Deze tutorial laat je zien hoe, maar aangezien we geen idee hebben van een component van derden die we zouden kunnen gebruiken:) zullen de voorbeelden worden gemaakt op een communityplug-in die wordt geactiveerd tijdens het onAfterProfileUpdate-evenement
Als je niet weet hoe je een plug-in moet maken die tijdens dit evenement wordt geactiveerd, raden we je aan deze handleiding te raadplegen

Implementeer het toch in uw component

Zoals vermeld in het overzicht van deze tutorial, zullen we meldingen genereren met behulp van de communityplug-in.
U zult hoogstwaarschijnlijk meldingen willen maken binnen uw component of uw plug-in. De volgende tutorial werkt in elk van deze gevallen. U hoeft alleen maar te bepalen op welk punt in uw code de melding wordt gemaakt en u hoeft alleen maar het JomSocial Core Libraries-bestand te laden.

require_once JPATH_ROOT . "/components/com_community/libraries/core.php" ;

Het volgen van de onderstaande tutorial werkt ook prima voor uw extensie

Het voorbereiden van de ontwikkelomgeving

1. We gaan ervan uit dat u al een voorbeeldplug-in van het communitytype hebt gemaakt, die wordt geactiveerd wanneer de gebruiker zijn profiel wijzigt
Als dit niet het geval is, kunt u een lege voorbeeldplug-in downloaden van , deze in Joomla installeren en de plug-in inschakelen. Het is genoemd Community - Voorbeeld van meldingen
2. Navigeer naar uw database en maak deze twee tabellen leeg, zodat ze helemaal geen records bevatten

A) voorvoegsel_community_notificatie
b) voorvoegsel_community_mailq

3. Zorg ervoor dat er minimaal twee (2) gebruikers aanwezig zijn op uw testlocaties en ken hun ID's

In eerdere versies van Joomla zijn gebruikers-ID's altijd begonnen vanaf het opgegeven nummer (62, 42). In Joomla 3 zal dit nummer willekeurig zijn, vandaar het beeld van onze testomgeving, omdat het aan uw kant zeker anders zal zijn.

De eerste kennisgeving

Open het php-bestand van de plug-in dat zich in ROOT/plugins/community/example bevindt
Binnen de functie onAfterProfileUpdate() vervangt u de

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

Zoals in het voorbeeld te zien is, heeft de notificatie-add-api 7 parameters

  • $cmd - is het meldingstype. In dit bestand kunt u alle soorten meldingen zien. ROOT/components/com_community/libraries/notificationtypes.php beginnend vanaf of rond regel 53. We raden aan het meldingstype system_messaging te gebruiken.
  • $actor - is de persoon die de actie uitvoert
  • $target - is de persoon of groep mensen die een melding ontvangt
  • $subject - is het onderwerp van de melding, zowel in het pop-upvenster voor meldingen als in de titel van de e-mail
  • $body - is de hoofdtekst van het e-mailmeldingsbericht
  • $template - als u een specifiek sjabloon nodig heeft, kunt u dit hier definiëren. Anders kan deze parameter leeg zijn
  • $params - op maat gedefinieerde parameters
  • Als we dit allemaal weten, kunnen we de variabelen definiëren die we zullen gebruiken
    Wijzig uw plug-incode in:

    $user = CFactory::getUser();

    $cmd = "systeemberichten";
    // eerste parameter, type activiteit $actor = $user -> id ;

    //tweede param - haal de id op van $actor $target = "965" ;

    // derde par. Wie ontvangt een melding? In onze ontwikkelomgeving is dit de admin-gebruiker met ID 965. In uw omgeving wilt u waarschijnlijk de ID van uw object of van een reeks gebruikers ophalen.


    $subject = "Onderwerp van melding" ;

    // Onderwerp van zowel e-mail- als pop-upmeldingen $body = ;

    $actor = CFactory::getUser();

    $params = nieuwe CParameter("" );

    CNotificationLibrary:: add ("system_messaging" , $actor -> "Dit is het bericht in de meldingstekst" , "" , $params );

    Dit is veel schoner en gemakkelijker te volgen, terwijl het feitelijk absoluut hetzelfde doet als de hierboven getoonde code.
    Aangepaste meldingsparameters

    Een notificatie-API kan worden uitgebreid met elke parameter die u wilt toevoegen.

    • Deze parameters kunnen worden doorgegeven aan een e-mailsjabloon, melding en uiteraard aan het taalbestand. ); $actor = CFactory::getUser();
    • $link = "http://www.google.com" ;
    • $params = nieuwe CParameter("" );
    • $params -> set ("actor" , $actor -> getDisplayName () ) ;

    // kan worden gebruikt als (actor) tag $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Link voor de (actor) tag $params -> set ("url" , $link ) ;//url van de hele activiteit. Wordt gebruikt wanneer u over de avatar beweegt in het meldingsvenster. Kan ook gebruikt worden als (url)tag in uitgaande e-mails. Zorg ervoor dat u de variabele $link hebt gedefinieerd:) CNotificationLibrary:: add ("system_messaging" , $actor -> id , "965" , "Meldingsonderwerp" , "Dit is het bericht van de meldingstekst" , "" , $params ) ;

    $params = nieuwe CParameter(

    - We willen een nieuw params-object maken en er gegevens aan toewijzen, zonder formeel een klasse te hoeven definiëren.
    $params->set("actor", $actor->getDisplayName()); - Uw melding moet altijd een acteur bevatten. Deze parameter kan als (actor)tag aan het sjabloon worden doorgegeven. In het meldingsvenster wordt de gebruiker gedefinieerd die een actie uitvoert.$params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id);

    CNotificationLibrary:: add ("system_messaging" , $actor -> id , "965" , JText::sprintf ("PLG_COMMUNITY_EXAMPLE_SUBJECT" ), JText::sprintf ("PLG_COMMUNITY_EXAMPLE_BODY" ), "" , $params );

    Het taalbestand zou er als volgt uit moeten zien

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(acteur) heeft profiel bijgewerkt" PLG_COMMUNITY_EXAMPLE_BODY = "Hallo beheerder \n Dit is de e-mail om u te informeren dat (acteur) profiel heeft bijgewerkt \n\n Als u naar Google wilt gaan, klik dan hier \n a href=" _QQ_" (url)"_QQ_">(url)"

    In dit voorbeeld hebben we de tag (actor) en (url) gebruikt om de gegevens door te geven aan zowel meldings- als e-mailsjablonen. Laten we eens kijken hoe dat eruit ziet.
    Wanneer u in het meldingsvenster over avatar zweeft, ziet u dat de (url) param is geactiveerd en de link naar Google via avatar toevoegt. Het is opzettelijk, omdat we het zo hebben gemaakt :)


    ]

    In hetzelfde venster, wanneer u over de actorlink zweeft. Dit is het deel waar (actor) de gebruiker echode die een actie uitvoert, terwijl (actor_url) ervoor zorgde dat het object correct werd gekoppeld


    Laten we eens kijken wat er gebeurt in de e-mailwachtrij


    En tot slot de daadwerkelijke e-mail die naar de eindgebruiker wordt verzonden


    Succes
    Tot nu toe hebben we drie (3) parameters gemaakt die met succes worden gebruikt in het meldingsvenster en in e-mails.

  • (actor) - Geeft de gebruikersnaam terug van de gebruiker die de actie uitvoert
  • (actor_url) - Geeft de attribuut aan de (acteur)
  • (url) - Is niet verplicht, maar u moet dit wel altijd in uw melding vermelden. Het is de hoofd-URL waar de actie heeft plaatsgevonden waarover we worden geïnformeerd.
  • Op dezelfde manier kunt u "

    • (doel) - als je het nodig hebt
    • (target_url) als u dit nodig heeft in uw melding.
    • (titel) - Vaak gebruikt om te verwijzen naar een object dat een melding heeft gegenereerd. Voorbeeld: 'Gebruiker X heeft een nieuwe foto geplaatst in album Y.' Album Y is hier de titel
    • (title_url) - Net als bij de vorige, de URL van een object dat een melding heeft gegenereerd.
    • (bericht) - Deze parameter kan worden gebruikt om het bericht in de hoofdtekst van JomSocial e-mail in te stellen (en weer te geven).

    Uiteindelijk besefte ik: je kon niemand beter vinden dan je vrouw. Het enige dat nog rest is het vinden van een vrouw

    PHP AJAX CRUD: records aanmaken, verwijderen, bewerken in de MySQL-database

    In dit artikel leren we hoe u records in een MySQL-database kunt toevoegen, bewerken en verwijderen met behulp van PHP. We gebruikten een JQuery-handler die een AJAX-verzoek naar een server-side script verzendt. De handler werkt de lijst met records bij.

    AJAX-formulier voor het verzenden van verzoeken voor creatie, verwijdering, bewerking

    Bij het toevoegen van een record stuurt het formulier via een AJAX-verzoek gegevens naar het PHP-script. Als de toevoeging succesvol is, wordt de lijst met vermeldingen opnieuw geladen.

    JQuery AJAX-functies voor CRUD-databasequery

    In de JQuery AJAX-functie hebben we schakelgevallen, bewerken en verwijderen. Deze gevallen genereren verschillende query- en antwoordgegevensreeksen, afhankelijk van de databaseacties.

    functie showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + ".message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + ".message-content").html(editMarkUp); ) functie cancelEdit(message,id) ( $("#message_" + id + ".message-content") .html(message); $("#frmAdd").show(); function callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "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, type: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break ; case "edit": $("#message_" + id + ".message-content").html(data);

    pauze; case "delete": $("#message_"+id).fadeOut();

    pauze; ) $("#txtmessage").val("");

    $("#loaderIcon").hide();

    ), fout:functie ()() ));

    Het tonen van berichten aan de gebruiker is een vrij veel voorkomende actie die een webapplicatie moet uitvoeren. Het kan voorkomen bij het verwerken van formulieren, het kunnen foutmeldingen zijn, berichten die u vertellen dat u zich moet registreren wanneer een gebruiker toegang probeert te krijgen tot een beperkt deel van de site, en in veel andere gevallen.

    Heel vaak worden het maken en uitvoeren van berichten gescheiden in verschillende HTTP-verzoeken. In de regel is het handig om een ​​omleiding te gebruiken na het verwerken van formulieren (om problemen met de knoppen Terug en Vernieuwen te voorkomen), maar tegelijkertijd is het natuurlijke moment voor het maken van een bericht precies het moment van het verwerken van formulieren en het uitvoeren van bijbehorende acties. Het. Waarom? Stel je voor dat de berichttekst er ongeveer zo uit zou moeten zien: “Het aantal bestelde eenheden voor het artikel ‘Muispad’ is met succes gewijzigd van 7 naar 12.” Na een redirect, wellicht qua functionaliteit naar een compleet andere pagina, wordt het een extra kopzorg om te bepalen wat er eerder is gedaan.

    Meestal worden berichten weergegeven in het POST-verzoek dat het formulier verwerkt - dit is niet goed, de inscripties "deze pagina is verouderd" verpesten het leven (wanneer de gebruiker besluit de knop Terug te proberen).

    Iemand gebruikt een omleiding en geeft vriendelijke berichten op.

    Tegelijkertijd is er een eenvoudige en voor de hand liggende manier om het leven beter te maken. Ondanks de voor de hand liggende reden heb ik het om de een of andere reden nog nooit iemand zien gebruiken - tenminste als ik naar de bronnen van anderen keek.

    We hebben dus een probleem: de boodschap moet in verschillende verzoeken 'leven'. We hebben een mechanisme nodig om de tekst van het bericht over te brengen naar de pagina waarop het bericht moet worden weergegeven. Waarschijnlijk herinner je je de sessies al.

    Ja, in grote lijnen heb je gelijk. Andere methoden, bijvoorbeeld via een globale variabele, laten het opslaan van gegevens niet toe in het geval dat een omleiding wordt gebruikt (opmerking door Maxim Naumenko). Bovendien zorg ik er meestal voor dat elk scherm in de applicatie, samen met andere informatie, berichten kan weergeven die op eerdere schermen zijn gegenereerd. Dit is handig omdat er geen aparte schermen hoeven te worden voorbereid voor het weergeven van berichten en de gebruiker niet opnieuw met de muis hoeft te klikken. Maar eigenlijk moet de ontwerper hier nadenken - om het gebied te benadrukken waarin berichten zouden verschijnen.

    Het idee is heel eenvoudig en kan met een paar klassen worden geïmplementeerd.

    Het eerste dat in je opkomt is het maken van een klasse Message, die in feite een bericht zou vertegenwoordigen in ons eenvoudige klassendiagram. Het bericht moet zichzelf kunnen opslaan in de sessie, maar ook op het scherm kunnen verschijnen.

    class Message ( /** * Berichtinhoud. */ var $content; /** * Constructor voor het initialiseren van de berichttekst. * * @param content berichtinhoud */ function Message($content) ( $this->content = $ content ;) /** * Schrijf een bericht naar de sessie */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Voer een bericht uit naar de pagina */ function toPage. () (echo. " - " . $this->content .
    "; } }

    De variabele $_SESSION wordt gebruikt om toegang te krijgen tot de sessie.

    Merk op dat $_SESSION een array is, we gebruiken slechts één element van deze array met de index ‘session_message’.

    In dit geval hebben we te maken met een “array van arrays” - wat we opslaan in het element ‘session_message’ is een array, dit is de lijst met verzonden berichten (er kunnen er uiteraard meerdere zijn).

    Als u de draad niet kunt vinden, is het tijd om de secties van de handleiding die gewijd zijn aan sessies en arrays, op te frissen.

    Het kan zijn dat u een vraag heeft. Waarom zijn lessen hier nodig? Het zou mogelijk zijn om met twee functies rond te komen. Maar laten we verder kijken. Mogelijk moeten we berichten met verschillende typen maken (info, fout, waarschuwing) en de ontvangers van berichten bepalen.

    Houd er rekening mee dat op dit moment niet het object zelf in de sessie wordt geplaatst, maar alleen de berichttekst. Met OOP kunnen we later het gedrag van de methode send() wijzigen zonder de clientcode te wijzigen die toegang heeft tot deze methode (in de toekomst kunnen we bijvoorbeeld het volledige Message-object naar de sessie schrijven als het veel velden heeft).

    Laten we ons voorstellen dat we dit zouden doen met behulp van functies. We zouden waarschijnlijk een message_send($txt) functie hebben, en ook een message_to_page($txt) functie. Nu moeten we de mogelijkheid toevoegen om verschillend gedrag te hebben voor verschillende soorten berichten. Functieaanroepen veranderen: message_send($txt, $kind), message_to_page($txt, $kind). U zult de hele applicatiecode moeten doorzoeken op zoek naar dergelijke functies en correcties moeten aanbrengen.

    Dit kan worden vermeden door van tevoren op de situatie te anticiperen door het bericht weer te geven als een associatieve array: $msg[‘txt’], $msg[‘kind’], dan zal er slechts één parameter in functieaanroepen voorkomen. Kun je voelen hoe dit een klasse probeert te worden?

    OOP geeft je dus de mogelijkheid om de luxe te hebben dat je niet alles van tevoren hoeft te bedenken.

    De volgende klasse - Inbox - is speciaal hiervoor ontworpen.

    class Inbox ( /** * Array van ontvangen berichten. */ var $messages = array(); /** * In de constructor halen we alle ontvangen berichten op * en verwijderen ze uit de sessie. */ function Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->berichten = nieuw bericht($messages[$i]);
    ) ) /* wis de berichtenreeks */ $_SESSION["session_messages"] = array();< $co; $i++) { $this->) /** * Geef de inhoud van het Postvak IN op de pagina weer.

    */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Bericht van het systeem:

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

    berichten[$i]->ToPage();

    ) ) )

    Laten we ons berichtensysteem uitproberen.

    Laten we een heel eenvoudig voorbeeld maken dat reageert op een formulierinzending door het aantal seconden in de huidige minuut te rapporteren.

    We hebben al het werk met arrays en sessies in klassen verborgen, en de uiteindelijke code ziet er eenvoudig en mooi uit.
    Maak een map op uw webserver, maak vervolgens deze drie bestanden daarin aan en probeer het script uit. Houd er rekening mee dat er geen problemen zijn met de knoppen Terug en Vernieuwen.
    Stel je nu voor dat je een complex portaal aan het maken bent, waarbij er in de regel meerdere blokken op de pagina's staan, en elk blok kan een afzonderlijke applicatie bevatten.
    Hier stuiten we op twee moeilijkheden:

    * Ik wil graag dat de lijst met berichten op een specifiek deel van de pagina verschijnt, en je hebt hier al een goede plek voor gevonden.

    Misschien hebben we nog steeds een aantal vergelijkbare dingen (als Inbox) en moeten we een buffersysteem creëren. Om niet te verwarren wiens output van wie is, zullen we waarschijnlijk de buffers een naam geven. We zullen ergens de volgorde opslaan waarin de buffers moeten worden uitgevoerd - bij voorkeur in een extern bestand om wijzigingen gemakkelijker te maken.

    Deze poging tot oplossing brengt ons al op het idee om XML te gebruiken als middel om tussentijdse gegevens op te slaan. En het gebruik van XSLT-stijlen zal het tweede probleem helpen oplossen.

    Ik zal niet stilstaan ​​bij wat XML is en wat XSLT is. Als u niet bekend bent met deze dingen, is zvon.org een goede plek om te beginnen met zoeken.

    Het idee is om geen HTML-code te genereren, maar een XML-structuur in de toPage()-methoden. Het paginadocument wordt gemaakt als een string met XML-code (het zal dienen als een “buffer”) en in de laatste fase van het script zullen we een XSL-transformatie gebruiken.

    Laten we ons eerst eens voorstellen wat het resultaat van het hoofdgedeelte van de code zou moeten zijn.

    minuut 57 seconden: 45

    Wat het is, is vrij eenvoudig te raden: twee berichten en een formulier. Houd er rekening mee dat het PHP-script alleen zo'n string hoeft voor te bereiden - het is heel eenvoudig. Bovendien is de volgorde van de hoofdtags niet belangrijk: u kunt ze bijvoorbeeld eerst plaatsen, wat handig is voor de programmeur. Hoe het te implementeren. U kunt, zonder iets te veranderen, uitvoerbuffering gebruiken, XML uitvoeren in plaats van HTML-code en aan het einde eenvoudig de uitvoer in een string vastleggen. Maar dan verliezen we flexibiliteit - soms wil je bijvoorbeeld foutopsporingsinformatie rechtstreeks naar de pagina uitvoeren (met behulp van echo). Tegelijkertijd werken PHP-ontwikkelaars aan een DOM-module die een meer geavanceerde manier biedt om boomdocumenten te maken en door te geven. Als we de DOM willen implementeren, zullen we de hele applicatie opnieuw moeten ontwerpen, waarbij we de uitvoer van strings moeten veranderen in het maken van DOM-elementen. Daarom geef ik er de voorkeur aan om de XML-representatie van objecten binnen de objecten zelf op te slaan, waarbij ik opeenvolgend een gemeenschappelijk XML-document samenvoeg. Het is niet zo moeilijk, het heeft alleen een kleine aanpassing nodig. U zult zien dat deze techniek niet strikt gebonden is aan een specifieke manier om XML-gegevens op te slaan, en hierdoor kunt u met weinig moeite de overstap maken naar het gebruik van de DOM. Merk allereerst op dat elk van onze objecten een toPage() -methode heeft. Deze gelijkenis zou ons moeten doen nadenken over de introductie van een nieuwe gemeenschappelijke ouderklasse. Laat elke klasse die stukjes van een XML-document voor een pagina kan maken, erven van een klasse die voor de XML-representatie van het object zorgt. Laten we het uitvoerbaar noemen.

    class Outputable ( /** * XML-container (string). */ var $output = ""; /** * Geef de inhoud van de container en maak de container leeg. * * @return een string met XML-gegevens */ function getOutput () ($ out = $this->output; $this->output = ""; return $out; ->output .= $string . "n" ) /** * "Abstracte" methode */ function toPage( ) ( ) )

    De methode toPage() is leeg gemaakt - in dit geval is deze nodig als indicator voor hoe externe “matryoshka”-klassen moeten communiceren met de binnenste klasse. We zouden hier echter een standaardimplementatie kunnen aanbieden als we zouden merken dat er veel objecten zijn die zichzelf op dezelfde manier op de pagina weergeven.

    De klassen Message en Inbox zullen enigszins veranderen - ze zouden nu beide moeten erven van Outputable, en de methoden toPage() zullen ook veranderen
    Bericht.php

    class Message extends Outputable ( /** * Berichtinhoud. */ var $content; /** * Constructor voor het initialiseren van de berichttekst. * * @param content berichtinhoud */ function Message($content) ( $this->content = $content; ) /** * Schrijf een bericht naar de sessie */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Voer een bericht uit naar de pagina ( $ this->appendOutput("".$this->content."" ) )

    class Inbox breidt Outputable uit ( /** * Array van ontvangen berichten. */ var $messages = array(); /** * In de constructor ontvangen we alle ontvangen berichten * en verwijderen ze uit de sessie. */ function Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->berichten = nieuw bericht($messages[$i]);< $co; $i++) { $this->) ) /* wis de berichtenreeks */ $_SESSION["session_messages"] = array();

    ) /** * Geef de inhoud van het Postvak IN op de pagina weer.

    */ function toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i
    berichten[$i]->naarPagina();

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

    ) $dit->appendOutput("");

    ))
    De uitvoermethode is veranderd - in plaats van rechtstreeks naar de pagina uit te voeren, wordt de externe representatie nu voorlopig opgeslagen in Outputable, dat in elk van de objecten 'zit'. De methode appendOutput() dient als vervanging voor de constructie echo(). Om de uitvoer van een object te verkrijgen, wordt de methode getOutput() gebruikt.

    Laten we nu eens kijken wat het clientgedeelte van de code is, waarmee hetzelfde probleem als voorheen wordt opgelost.

    index.php

    De belangrijkste innovatie zit in het object $global_content, waarvan de naam voor zich spreekt. In dit geval behoort het tot de klasse Outputable; bij echte taken zou u waarschijnlijk een aparte klasse voor de pagina-inhoud maken.

    Als je goed kijkt, is de inhoud van het script vrijwel niet veranderd: dezelfde inbox, dezelfde toPage(). Een instructie toegevoegd die de inhoud van de berichtenlijst weergeeft in de pagina-inhoud. Ter afwisseling worden er nu twee berichten gegenereerd.

    Elke module die als resultaat van zijn werk XML-gegevens genereert, kan in een project worden gebruikt. Dit is trouwens een van de voordelen ten opzichte van sjabloon-engines, waarbij het maken van gegevens bestaat uit een reeks aanroepmethoden (toewijzen, enz.) van een specifieke engine, waarvoor geen gemeenschappelijke standaard bestaat.

    Een ander voordeel is het gemak van debuggen. Als u het script uitvoert, zult u merken dat elke pagina debug-uitvoer bevat: een XML-prototype dat het debuggen van toepassingen aanzienlijk vereenvoudigt.

    Iets anders waar u aan moet denken, is hoe u berichtobjecten kunt maken. Het is niet altijd handig om new rechtstreeks in de clientcode te gebruiken. Maar misschien is dit een onderwerp voor een apart artikel.

    Tenslotte nog een galop over de vooruitzichten:

    * pop-upvensters voor een lijst met belangrijke berichten
    * "afzenderpagina's" en "bestemmingspagina's" in berichten
    * loggen van berichten in de database
    * knop "toon geschiedenis van mijn acties"
    * statistische analyse van gebruikersacties binnen sessies
    * "intelligente assistenten" in webapplicaties

    In mijn Zend-app schrijf ik een stukje API voor mobiele apps. Om het voor mobiele ontwikkelaars gemakkelijker te maken, gebruik ik Swagger. Tot nu toe werkt alles prima, behalve één GET-verzoek.

    Wanneer bel ik /user/messages/(sessionToken)? NumMessages = (numMessages) & pageNr = (pageNr) in de browser krijg ik de gewenste resultaten, maar wanneer ik Swagger dit verzoek probeer te laten uitvoeren, wordt alleen de sessionToken doorgegeven. Ik heb deze annotaties voor Swagger geprobeerd:

    /** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" Haalt berichten op", * notes="", * type="string", * bijnaam="getUsermessagesPaged", * autorisaties=(), * @SWG\Parameter(* name="sessionToken", * description="Het token van een actieve gebruikerssessie", * vereist=true, * type="string", * paramType="pad", * allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" aantal berichten op pagina (numMessages & pageNr worden genegeerd als ze niet allebei zijn ingesteld)", * vereist=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="pagenumber (numMessages & pageNr worden genegeerd als ze niet allebei zijn ingesteld)", * vereist=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (messages => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json met fout "niet ingelogd"" ) *) *) */

    Ziet iemand mijn fout?

    Alle hulp is welkom.

    Eerlijk

    Update. Zoals voorgesteld, heb ik beide paramTypes gewijzigd in "query" en het pad gewijzigd:

    @SWG\Api(pad="/gebruiker/berichten/(sessionToken)",

    maar hij werkte niet als vechter.

    xdebug in Eclipse PDT toont:

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

    QueryParams => Zend\\Stdlib\\Parameters - *ArrayObject*storage => Array - =>

    zwierige JSON:

    ("apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [( "pad": "\/user", "description": "Bewerkingen over gebruikers" ) ], "info" :( "title": "API voor mobiele toegang", "description": "Dit is de xxx mobiele toegangsapi.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "comment": "\/**\ * @SWG\\Info(\ * title="API voor mobiele toegang",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

    Hier is de /user-uitvoer:

    ( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "path": "/user/balance/(sessionToken)", "operations": [ ( "method": "GET", "summary": "Haalt userbalance op", "nickname": "getUserdata", "type": "string", "parameters": [( "paramType": "pad", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Het token van een actieve gebruikerssessie" ], "responseMessages": [ ( "code": 200, "message": "json (balance => "user_balance")" ), ( "code": 400, "message ": "json met fout "niet ingelogd"" ], "notes": "", "autorisaties": () ) ]), ( "pad": "/gebruiker/login", "bewerkingen": [ ( "method": "POST", "summary": "Logt gebruiker in op het systeem", "nickname": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "email", "type": "string", "required": true, "allowMultiple": false, "description": "Het e-mailadres van de gebruiker om in te loggen" ), ( "paramType": "form", "name": "wachtwoord", "type": "string", "required": true, "allowMultiple": false, "description": "Het wachtwoord voor inloggen in leesbare tekst" ], "responseMessages": [ ( "code": 200, "message": "json met session_id, user_id, user_balance" ), ( "code": 400, "message": "json met fout "geen gebruiker met opgegeven e-mailadres en wachtwoord"" ), ( " code": 400, "message": "json met fout "ongeldige invoer"" ), ( "code": 400, "message": "json met fout "no post request"" ) ], "notes": "" , "autorisaties": () ) ] ), ( "pad": "/gebruiker/uitloggen", "bewerkingen": [ ( "methode": "POST", "samenvatting": "Logt gebruiker uit", "bijnaam" : "logoutUser", "type": "string", "parameters": [( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, " allowMultiple": false, "description": "Het token van een actieve gebruikerssessie" ], "responseMessages": [( "code": 200, "message": "json (result => "verwijderd")" ), ( "code": 400, "message": "json met fout "geen user_session met opgegeven sid"" ), ( "code": 400, "message": "json met fout "ongeldige invoer"" ), ( "code ": 400, "message": "json met fout "no post request"" ], "notes": "", "authorizations": () ) ]), ( "path": "/user/messages/( sessionToken)", "operations": [ ( "methode": "GET", "summary": "Nieuwe berichten ophalen", "nickname": "getUsermessages", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Het token van een actieve gebruikerssessie" ) ], "responseMessages": [( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json met fout "niet ingelogd "" ) ], "notes": "", "authorizations": () ), ( "method": "GET", "summary": "Haalt berichten op", "nickname": "getUsermessagesPaged", "type" : "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "description": "Het token van een actieve gebruikerssessie" ), ( "paramType": "query", "name": "numMessages", "type": "string", "required": true, "description": "aantal berichten op pagina (numMessages & pageNr worden genegeerd als ze niet allebei zijn ingesteld)" ), ( "paramType": "query", "name": "pageNr", "type": "string", "required": true, "description": "pagenumber ( numMessages en pageNr worden genegeerd als ze niet allebei zijn ingesteld)" ) ], "responseMessages": [( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400 , "message": "json met fout "niet ingelogd"" ], "notes": "", "autorisaties": () ) ]), ( "pad": "/user/userdata", "operations" : [ ( "method": "POST", "summary": "Posts userdata", "nickname": "postUserdata", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Het token van een actieve gebruikerssessie" ), ( "paramType": "form ", "name": "wachtwoord", "type": "string", "required": false, "allowMultiple": false, "description": "nieuw wachtwoord" ), ( "paramType": "form", " name": "address", "type": "string", "required": false, "allowMultiple": false, "description": "nieuw adres" ), ( "paramType": "form", "name": "huisnr", "type": "string", "required": false, "allowMultiple": false, "description": "nieuw huisnr" ), ( "paramType": "form", "name": "zip" , "type": "string", "required": false, "allowMultiple": false, "description": "new zip" ), ( "paramType": "form", "name": "city", "type ": "string", "required": false, "allowMultiple": false, "description": "nieuwe stad" ), ( "paramType": "form", "name": "email", "type": " string", "required": false, "allowMultiple": false, "description": "nieuwe e-mail" ) ], "responseMessages": [( "code": 200, "message": "json (user => "userdata ")" ), ( "code": 400, "message": "json met fout

    Het lijkt een fout dat mijn swagger-ui geen verzoekparameters verzendt? Hier is een voorbeeld met één query-param, sessionToken: (beheerd door FireBug 2.0.6)

    GET /ias/public/user/balance HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accepteren: application/json Accept-Taal: de, en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/json Referer: http://localhost/ias/swagger/ Cookie: __utma=111872281.581414660.1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Verbinding: keep-alive

    Het antwoord was:

    HTTP/1.1 400 Slechte aanvraagdatum: dinsdag 25 november 2014 14:58:20 GMT Server: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 Inhoudslengte: 25 Verbinding: sluiten Inhoudstype: application/json; tekenset=utf-8

    Het antwoord was correct omdat er geen sessionToken werd doorgegeven.

    Dit vereist werk, maar het komt niet van swagger-ui:

    GET /ias/public/user/balance?sessionToken=HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accepteren: text/html,application/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accepteer taal: de,en-US;q=0.7,en;q=0.3 Accepteer codering: gzip, deflate Cookie: __utma=111872281.581414660 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Verbinding: keep-alive