Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: singleSRC via JSON an Modell übergeben

  1. #1
    Contao-Nutzer Avatar von MikeTheMechanic
    Registriert seit
    13.05.2014.
    Ort
    400km nördlich vom Gardasee - südlich von München - Frankfurt ist auch 400km entfernt
    Beiträge
    16

    Standard singleSRC via JSON an Modell übergeben

    Hi,

    ich schau mir gerade das Bundle HeimrichHannot\ApiBundle an. Das Bundel finde ich gut und schraub daran so gem. meinen Bedürfnissen rum.

    Momentan scheitere ich an Folgendem - und das ist nicht Bundle-spezifisch

    Ich will eine News, ein Event ... mit einem Bild erstellen. Das Bild kommt Base64 encoded, die restlichen Daten sind klassisch JSON. Am Ende geht alles in das korrespondierende Modell - aber als JSON - $data ist das gesammelte JSON

    PHP-Code:
    $adapter->setRow($data);
    $adapter->save(); 
    Vorher habe ich das Bild decodiert, als File gespeichert und dem FilesModel zur Ermittlung der uuid gegeben. Diese würde ich gerne verwenden, da sonst im BE die Datei nicht erscheint bzw. nichts gespeichert wird (meist null)

    PHP-Code:
    $objFile = \FilesModel::findByPath($image_src)->uuid
    Die uuid geht dann via JSON an das Modell und soll gespeichert werden. Das Modell mag aber die uuid nicht - egal was ich da irgendwie mache, konvertiere, kodiere ...

    Hat jemand eine Idee, wie ich einem Modell via JSON die uuid mitgeben kann, so dass Contao diese auch in der DB speichert?

    Das JSON manipuliere ich wie folgt

    PHP-Code:
            if (isset($data["singleSRC"]))
            {
                
    $image_src 'files/images/events/' $data['singleSRC'];
                
    $data["singleSRC"]= \FilesModel::findByPath($image_src)->uuid;
                
    $data=\Safe\json_encode($data);
                
    $request->request->replace([$data]);
            }
            return (
    parent::create($request$user)); 
    Geändert von MikeTheMechanic (22.10.2021 um 18:48 Uhr)

  2. #2
    Contao-Nutzer Avatar von MikeTheMechanic
    Registriert seit
    13.05.2014.
    Ort
    400km nördlich vom Gardasee - südlich von München - Frankfurt ist auch 400km entfernt
    Beiträge
    16

    Standard

    Ich habe es nun wie folgt gelöst

    Erst Aufruf an das Parent Objekt und das speicher über das Modell, danach manipuliere ich nochmals die Row
    PHP-Code:
            $out parent::create($request$user);

            if (isset(
    $data["singleSRC"]))
            {
                
    $image_src 'files/images/events/' $data['singleSRC'];
                
    $fileid = \FilesModel::findByPath($image_src)->id;

                
    $targetid intval($out['item']['id']);
                
    $db = \Database::getInstance();
                
    $stmt $db->prepare('UPDATE tl_calendar_events set singleSRC = (Select uuid from tl_files where id = ' .  $fileid .') where id = ' $targetid);
                
    $res  $stmt->execute();
            } 
    Gefallen tut es mir nicht, da jetzt 2 DB Statements stattfinden, aber das mit dem uuid Voodoo verstehe ich nicht und habe es ganz ehrlich noch nie so richtig verstanden. Ich will doch nur das Bild im Backend sehen und da reicht doch auch die ID? Oder sehe ich das falsch?

  3. #3
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hallo
    Mit
    Code:
     \Contao\StringUtil::binToUuid()
    konvertiert du die bin uuid in einen String, welcher für JSON ready ist. Mit
    Code:
     \Contao\StringUtil::uuidToBin()
    wieder zurück.
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  4. #4
    Contao-Nutzer Avatar von MikeTheMechanic
    Registriert seit
    13.05.2014.
    Ort
    400km nördlich vom Gardasee - südlich von München - Frankfurt ist auch 400km entfernt
    Beiträge
    16

    Standard

    Hallo Marko,

    das hatte ich auch schon ausprobiert. Nachdem das JSON aber zuerst in das Model zum Speichern geht, wird das Feld SingleSRC zu lang

    SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'singleSRC'

    Der Wert sieht ja dann so aus

    'd343d304-332b-11ec-b944-be7f41c72358'

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •