Skocz do zawartości
Pecetowicz Forum komputerowe

[Symfony] Puste pole TextEditorField w panelu administracyjnym


Przejdź do rozwiązania Rozwiązane przez Pankrok,

Rekomendowane odpowiedzi

  • Ekspert

Cześć, mam taki oto problem Symfony 5 + EasyAdmin w bazie danych zapisuję kontent strony jako blob, i wszystko jest ładnie, na froncie widzę to co chcę.

Ale po wejściu w panel admina pole TextEditorField::new('content') jest puste  😐

dumpując stream_get_contents($this->content) w admince, dostają prawidłowego stringa i trzy inne puste stringi, nie mam pojęcia co skopałem 😐
Macie pomysł jak przesłać tego stringa do TextEditorField?

1) PageEntity:

Spoiler

 



<?php

(...)

    /**
     * @ORM\Column(type="blob", nullable=true)
     */
    private $content;

(...)

public function getContent() : string
    {
        if ($this->content === null) return '';
        return stream_get_contents($this->content);
    }

 

 

 

2) PagesCrudController:

Spoiler


<?php

namespace App\Controller\Admin;

use App\Entity\Pages;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Field\LocaleField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;


class PagesCrudController extends AbstractCrudController
{    
    public static function getEntityFqcn(): string
    {
        return Pages::class;
    }
    
    public function configureFields(string $pageName): iterable
    {
        return [
            IdField::new('id')->onlyOnIndex(),
            TextField::new('prefix')->setFormTypeOptions(['required' => false]),
            TextField::new('name'),
            LocaleField ::new('locale'),
            NumberField::new('pageOrder'),
            BooleanField::new('active'),
            TextEditorField::new('content')
        ];
    }
}

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
Napisano (edytowane)

A dlaczego zapisujesz to jako blob?

 

Nvm, możesz w Entity zrobić dodatkową, publiczną metodę (np. viewContent), oznaczyć ją jako `@internal` i zamiast: 

TextEditorField::new('content')

Użyć: 

TextEditorField::new('viewContent')

A w tej metodzie, co tylko chcesz... Samą metodę `configureFields` też możesz zaifować, bo pod `$pageName` masz różne typy.
Użyj np. `EasyCorp\...\Crud::PAGE_INDEX`.

Edytowane przez -n3veR
  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
Napisano (edytowane)

Pozostałość po poprzednim skrypcie, nie chce teraz konwertować danych do text

 

Edit: dzięki sprawdzę i dam znać.

Edytowane przez Pankrok
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Musiałbym ten projekt postawić u siebie i sprawdzić, bo też jestem dość świeży w EA 😄 i sporo jeszcze nie wiem.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
  • Rozwiązanie
Napisano (edytowane)

Jak nie zadziała i się załamie to Ci podeślę 🙂 dzięki. Btw to EA przekonał mnie do Symfony 🙂

edit: rozwiązane
zrobiłem to mało elegancko ale działa, aktualnie kod mojego entity wygląda tak:

 <?php
    public function getContent()
    {
        if ($this->content === null) return '';
        if (!is_string($this->content)) 
        {   
            $handler = stream_get_contents($this->content);
            if(strlen($handler) > 0) {
                $this->content = $handler;
            }
        }
        
        return $this->content;
    }

 

Edytowane przez Pankrok
rozwiazane
  • Lubię to! 1
  • Super 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Jeżeli już chcesz nadpisywać `$this->content`, to rób to zawsze 😄
Moja propozycja metody:

<?php

declare(strict_types=1);

public function getContent(): string
{
  $this->content = $this->content ?? '';

  // if is resource
  if (!empty($this->content) && !is_string($this->content)) {
    $this->content = stream_get_contents($this->content) ?: '';
  }

  return $this->content;
}

 

  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...