Piotr Krajewski

web application programmer

Wypowiedzi

  • Piotr Krajewski
    Wpis na grupie Jedźmy razem samochodem w temacie [kierowca] Trójmiasto -> Warszawa -> Trójmiasto

    Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Jedźmy razem samochodem

  • Piotr Krajewski
    Wpis na grupie PHP w temacie Automatyczne publikowanie postów na Facebooku (bez...
    30.01.2013, 19:44

    jeśli dobrze pamiętam to long time token nie dotyczy aplikacji webowych (jedynie desktopowych i mobilnych)

  • Piotr Krajewski
    Wpis na grupie PHP w temacie Automatyczne publikowanie postów na Facebooku (bez...
    30.01.2013, 15:24

    był scope offline_access, niestety facebook zrobił go deprecated i trzeba odnawiać token co 2 miesiące (poprzez zalogowanie użytkownika np. w popupie).Piotr Krajewski edytował(a) ten post dnia 30.01.13 o godzinie 15:24

  • Piotr Krajewski
    Wpis na grupie Olsztyn moje miasto w temacie jedźmy razem samochodem!:)

    Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Olsztyn moje miasto

  • Piotr Krajewski
    Wpis na grupie Jedźmy razem samochodem w temacie Gdańsk -> Kraków | Kraków -> Gdańsk

    Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Jedźmy razem samochodem

  • Piotr Krajewski
    Wpis na grupie Jedźmy razem samochodem w temacie Trójmiasto -> Olsztyn

    Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Jedźmy razem samochodem

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie multiupload obrazkow i relacja oneToMany
    20.03.2012, 15:54

    rozważałem tę opcje nie mniej jednak to co ty uwazasz za zalete (generowanie miniaturek w locie) ja uwazam za wadę. Wolę dać większe obciążenie podczas ich dodawania (gdzie de facto takich requestow bedzie mniej) niz przegladania. Dlatego tez pytam się o inne rozwiazanie

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie multiupload obrazkow i relacja oneToMany
    20.03.2012, 08:24

    Hej,

    chciałbym sie zorientować jak macie rozwiazany multiupload obrazka w formularzu.
    Chodzi przede wszystkim o formularz, który jest zbudowany w oparciu o Encje1 zas obrazki miały by być trzymane w Encji2 gdzie Encja1 jest w relacji oneToMany do Encji2.

    mógłby ktoś podpowiedzieć jaki jest best practices dla tego problemu ?
    Ponadto prosiłbym też o informacje odnośnie operacji na obrazkach np. resize i crop.

    Na tą chwile operuja tablicą obiektów:


    Array
    (
    [0] => Symfony\Component\HttpFoundation\File\UploadedFile Object
    (
    [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
    [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => Screen Shot 2012-02-01 at 8.02.37 PM.png
    [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/png
    [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 867212
    [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
    [pathName:SplFileInfo:private] => /private/var/tmp/phpOokCJz
    [fileName:SplFileInfo:private] => phpOokCJz
    )

    [1] => Symfony\Component\HttpFoundation\File\UploadedFile Object
    (
    [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
    [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => Screen Shot 2012-02-01 at 8.06.17 PM.png
    [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/png
    [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 870576
    [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
    [pathName:SplFileInfo:private] => /private/var/tmp/php0R8V0K
    [fileName:SplFileInfo:private] => php0R8V0K
    )

    )


    którą bym chciał z automatu zauploadowac pliki (oryginal i miniaturka) oraz dodać wpis do bazy.
    Zależy mi na podpoiwedzi jak powinien wygladac model dla tego problemu.

    Pozdrawiam

  • Piotr Krajewski
    Wpis na grupie Olsztyn moje miasto w temacie jedźmy razem samochodem!:)

    Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Olsztyn moje miasto

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Unikalna para kluczy w adnotacjach
    20.02.2012, 10:01

    tak, takie rozwiazanie chcialem zastosowac w ostateczności (bo po co tworzyc nową klasę tylko dla zdefiniowania jednej linijki).

    No nic chyba tak trzeba bedzie zrobić.
    Thx

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Unikalna para kluczy w adnotacjach
    19.02.2012, 21:49

    tak wiem ze cos takiego istnieje ale problem jest taki iż nie mam zdefiniowanej klasy encji w której miało by to być zastosowane (gdyz jest tworzona relacja manyToMany i symfony z automatu tworzy tabele).

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Unikalna para kluczy w adnotacjach
    19.02.2012, 11:57

    Hej mam problem,

    pytanko właściwie tyczy sie doctrine2 lecz jest ściśle powiązane z symfony2 wiec może ktoś będzie znał odpowiedz.

    Mam sobie dwie klasy entity: Attraction oraz User.
    Tworze sobię relacje manyToMany:

    Attraction:


    /**
    * @ORM\ManyToMany(targetEntity="Explore\UserBundle\Entity\User", mappedBy="observers", cascade={"persist", "remove"})
    */
    private $observed;


    User:

    /**
    * @ORM\ManyToMany(targetEntity="Explore\SiteBundle\Entity\Attraction", inversedBy="observed", cascade={"persist", "remove"})
    * @ORM\JoinTable(name="attraction_observers",
    * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")},
    * inverseJoinColumns={@ORM\JoinColumn(name="attraction_id", referencedColumnName="id")}
    * )
    */
    private $observers;


    i moje pytanko: jak utworzyć unikalną pare kluczy w tabeli "attraction_observers" dla kolumn user_id oraz attraction_id ?
    Czyli rezultatem w bazie danych powinna być możliwość dodawania rekordów z unikalną parą kluczy np.

    dobrze:
    user_id: 1
    attraction_id: 2

    user_id: 1
    attraction_id: 3

    źle:
    user_id: 1
    attraction_id: 1

    user_id: 1
    attraction_id: 1

    Ma ktoś może jakąs porade jak to zdefiniować w adnotacjach?Piotr Krajewski edytował(a) ten post dnia 19.02.12 o godzinie 12:15

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Warning: spl_object_hash() i metoda persist w kontrolerze
    30.01.2012, 22:30

    zaraz popatrze, ale wlasnie mi jest tak potrzebne ze czesc danych idzie z formularza a kilka np. user_id idzie z zmiennej ... hmmmm

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Warning: spl_object_hash() i metoda persist w kontrolerze
    30.01.2012, 21:34

    oki to w takim razie jak pozniej mam ustawic dla user_id id uzytkownika skoro nie bede mial settera i gettera tego pola (podobnie dla pozostalych) ?

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Warning: spl_object_hash() i metoda persist w kontrolerze
    30.01.2012, 20:58

    Faktycznie ot byl ten problem, nie mniej jednak mam ogromny problem z poprawną definicją Modelu, gdyż mając takie coś:


    <?php

    namespace Explore\SiteBundle\Entity;

    use Gedmo\Mapping\Annotation as Gedmo;
    use Doctrine\ORM\Mapping as ORM;

    use Explore\SiteBundle\Repository\AttractionRepository as AttractionRepository;

    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints\NotBlank;


    /**
    * Explore\SiteBundle\Entity\Attraction
    *
    * @ORM\Table(name="attractions")
    * @ORM\Entity(repositoryClass="Explore\SiteBundle\Repository\AttractionRepository")
    * @ORM\HasLifecycleCallbacks()
    */
    class Attraction
    {
    /**
    * @var integer $id
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;


    /**
    * @var integer $user_id
    * Id uzytkownika posiadajacego atrakcje
    *
    * @ORM\Column(name="user_id", type="integer")
    */
    private $user_id;


    /**
    * @var integer $region_id
    * Id okreslajace id regionu
    *
    * @ORM\Column(name="region_id", type="integer")
    */
    private $region_id;


    /**
    * @var integer $city_id
    * Id okreslajace miasto przypisane do atrakcji
    *
    * @ORM\Column(name="city_id", type="integer")
    */
    private $city_id;


    /**
    * @var integer $category_id
    * Id okreslajace przynaleznosc atrakcji do kategorii
    *
    * @ORM\Column(name="category_id", type="integer")
    */
    private $category_id;


    /**
    * @var string $title
    * Tytul atrakcji
    *
    * @ORM\Column(name="title", type="string", length=255)
    */
    private $title;


    /**
    * @var string title_slug
    * Tytul atrakcji w postacji SLUG
    *
    * @Gedmo\Slug(fields={"title"})
    * @ORM\Column(length=255, unique=true)
    */
    private $title_slug;


    /**
    * @var text $description
    * Opis atrakcji
    *
    * @ORM\Column(name="description", type="text")
    */
    private $description;


    /**
    * @var text $important
    * Wazne informacje odnosnie miejsca
    *
    * @ORM\Column(name="important", type="text")
    */
    private $important;


    /**
    * @var smallint $rank
    * Srednia ocena atrakcji - oceny sa dawane przez uzytkownikow
    *
    * @ORM\Column(name="rank", type="smallint", length=1)
    */
    private $rank;


    /**
    * @var string $latitude
    * Szerokosc geograficzna
    *
    * @ORM\Column(name="latitude", type="decimal", precision=16, scale=14)
    */
    private $latitude;


    /**
    * @var string $longitude
    * Dlugosc geograficzna
    *
    * @ORM\Column(name="longitude", type="decimal", precision=16, scale=14)
    */
    private $longitude;


    /**
    * @var string $thumbnail
    * Miniaturka / glowne zdjecie atrakcji
    *
    * @ORM\Column(name="thumbnail", type="string")
    */
    private $thumbnail;


    /**
    * @var boolean $active
    * Czy atrakcja / obiekt jest nadal dostepny (fizycznie w relanym swiecie)
    *
    * @ORM\Column(name="active", type="boolean")
    */
    private $active;


    /**
    * @var integer $level
    * Poziom trudnosci w explorowaniu miejsca
    *
    * @ORM\Column(name="level", type="integer")
    */
    private $level;


    /**
    * @var integer $attractive
    * Atrakcyjnosc miejsca
    *
    * @ORM\Column(name="attractive", type="smallint", length=1)
    */
    private $attractive;


    /**
    * @var string $views
    * Ilosc odwiedzin tego miejsca (na stronie wwww)
    *
    * @ORM\Column(name="views", type="integer")
    */
    private $views;


    /**
    * @var string $status
    * Status atrakcji:
    * 0 - nieaktywny
    * 1 - aktywny
    * 2 - zawieszony
    * 3 - usuniety
    *
    * @ORM\Column(name="status", type="smallint", length=1)
    */
    private $status;


    /**
    * @var boolean $promoted
    * Czy atrakcja / obiekt jest promowany (m.in na stronie glownej)
    *
    * @ORM\Column(name="promoted", type="boolean")
    */
    private $promoted;


    /**
    * @var datetime $activated_at
    * Data aktywacji atrakcji
    *
    * @ORM\Column(name="activated_at", type="datetime")
    */
    private $activated_at;


    /**
    * @var datetime $created_at
    * Data stworzenia atrakcji
    *
    * @Gedmo\Timestampable(on="create")
    * @ORM\Column(type="date")
    */
    private $created_at;


    /**
    * @var datetime $updated_at
    * Data aktualizacji atrakcji
    *
    * @ORM\Column(type="datetime")
    * @Gedmo\Timestampable(on="update")
    */
    private $updated_at;



    /*
    *
    * RELATIONS
    *
    */


    /**
    * @ORM\ManyToOne(targetEntity="Explore\UserBundle\Entity\User", inversedBy="attractions", cascade={"persist"})
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
    */
    private $user;


    /**
    * @ORM\ManyToOne(targetEntity="City", inversedBy="attractions", cascade={"persist"})
    * @ORM\JoinColumn(name="city_id", referencedColumnName="id")
    */
    private $city;


    /**
    * @ORM\ManyToOne(targetEntity="Region", inversedBy="attractions", cascade={"persist"})
    * @ORM\JoinColumn(name="region_id", referencedColumnName="id")
    */
    private $region;


    /**
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="attractions", cascade={"persist"})
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
    */
    private $category;


    /**
    * @ORM\ManyToMany(targetEntity="Explore\UserBundle\Entity\User", inversedBy="observe", cascade={"persist"})
    * @ORM\JoinTable(name="observed_attraction",
    * joinColumns={@ORM\JoinColumn(name="attraction_id", referencedColumnName="id")},
    * inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
    * )
    */
    private $observed;


    /**
    * @ORM\ManyToMany(targetEntity="Tag", inversedBy="attraction", cascade={"persist"})
    * @ORM\JoinTable(name="attraction_tags",
    * joinColumns={@ORM\JoinColumn(name="attraction_id", referencedColumnName="id")},
    * inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
    * )
    */
    private $tags;


    /**
    * @ORM\OneToMany(targetEntity="Image", mappedBy="attraction")
    */
    private $images;





    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
    //$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
    // $this->user = new \Doctrine\Common\Collections\ArrayCollection();
    // $this->city = new \Doctrine\Common\Collections\ArrayCollection();
    // $this->region = new \Doctrine\Common\Collections\ArrayCollection();

    //$this->tags = new ArrayCollection();

    $metadata->addPropertyConstraint('title', new NotBlank());
    $metadata->addPropertyConstraint('description', new NotBlank());
    }

    public function getId()
    {
    return $this->id;
    }

    public function setUserId($id)
    {
    $this->user_id = $id;
    }

    public function getUserId()
    {
    return $this->user_id;
    }

    public function getUser()
    {
    return $this->user;
    }

    public function setRegionId($id)
    {
    $this->region_id = $id;
    }

    public function getRegionId()
    {
    return $this->region_id;
    }

    public function getRegion()
    {
    return $this->region;
    }

    public function setCityId($id)
    {
    $this->city_id = $id;
    }

    public function getCityId()
    {
    return $this->city_id;
    }

    public function getCity()
    {
    return $this->city;
    }

    public function setCategoryId($id)
    {
    $this->category_id = $id;
    }

    public function getCategoryId()
    {
    return $this->category_id;
    }

    public function getCategory()
    {
    return $this->category;
    }

    public function setTitle($title)
    {
    $this->title = $title;
    }

    public function getTitle()
    {
    return $this->title;
    }

    public function getTitleSlug()
    {
    return $this->title_slug;
    }

    public function setDescription($description)
    {
    $this->description = $description;
    }

    public function getDescription()
    {
    return $this->description;
    }

    public function setImportant($important)
    {
    $this->important = $important;
    }

    public function getImportant()
    {
    return $this->important;
    }

    public function setRank($rank)
    {
    $this->rank = $rank;
    }

    public function getRank()
    {
    return $this->rank;
    }

    public function setAttractive($attractive)
    {
    $this->attractive = $attractive;
    }

    public function getAttractive()
    {
    return $this->attractive;
    }

    public function setLatitude($latitude)
    {
    $this->latitude = $latitude;
    }

    public function getLatitude()
    {
    return rtrim($this->latitude, '0');
    }

    public function setLongitude($longitude)
    {
    $this->longitude = $longitude;
    }

    public function getLongitude()
    {
    return rtrim($this->longitude, '0');
    }

    public function setViews($views)
    {
    $this->views = $views;
    }

    public function getViews()
    {
    return $this->views;
    }

    public function setStatus($status)
    {
    $this->status = $status;
    }

    public function getStatus()
    {
    return $this->status;
    }

    public function getNamedStatus()
    {
    return AttractionRepository::$statuses[$this->status];
    }

    public function getLabelStatus()
    {
    return AttractionRepository::$statusLabel[$this->status];
    }

    public function setPromoted($promoted)
    {
    $this->promoted = $promoted;
    }

    public function getPromoted()
    {
    return $this->promoted;
    }

    public function setActive($active)
    {
    $this->active = $active;
    }

    public function getActive()
    {
    return $this->active;
    }

    public function setLevel($level)
    {
    $this->level = $level;
    }

    public function getLevel()
    {
    return $this->level;
    }

    public function setThumbnail($thumbnail)
    {
    $this->thumbnail = $thumbnail;
    }

    public function getThumbnail()
    {
    return $this->thumbnail;
    }

    public function setActivatedAt()
    {
    $this->activated_at = new \DateTime();
    }

    public function getActivatedAt()
    {
    return $this->activated_at;
    }

    public function getCreatedAt()
    {
    return $this->created_at;
    }

    public function getUpdatedAt()
    {
    return $this->updated_at;
    }


    public function getTags()
    {
    return $this->tags;
    }

    public function setTags(ArrayCollection $tags)
    {
    //http://webspirited.com/tagit/
    //http://symfony.com/doc/current/cookbook/form/form_collections.html
    // $tags = explode(',', str_replace(', ', ',', $tags));

    echo '<pre>';
    print_r($tags);
    echo '</pre>';
    exit;
    /*
    $this->attraction_tags = $tags;

    foreach ($tags as $tag){
    $tag->setAttraction($this);
    }*/
    }

    public function getImages()
    {
    return $this->images;
    }
    }


    i w akcji kontrolera robię najprostszą rzecz:


    $attraction = new Attraction();
    $attraction->setUserId(2);
    $attraction->setCategoryId(2);
    $attraction->setCityId(2);
    $attraction->setRegionId("1");
    $attraction->setTitle('dupa');
    $attraction->setDescription('kupa');
    $attraction->setImportant('cipa');
    $attraction->setRank(2);
    $attraction->setLatitude(54.463004);
    $attraction->setLongitude(21.639633);
    $attraction->setThumbnail('ss.jpg');
    $attraction->setAttractive(2);
    $attraction->setActive(1);
    $attraction->setLevel(8);
    $attraction->setViews(1);
    $attraction->setStatus(0);
    $attraction->setPromoted(0);
    $entity = $this->getDoctrine()->getEntityManager();
    $entity->persist($attraction);
    $entity->flush();
    return new Response('Created product id '.$attraction->getId());


    dostaje błędy na kluczach obcych pokroju tego:


    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'region_id' cannot be null


    i tak dalej. Moje pytanie brzmi - co robie nie tak? bo jeden blad goni drugi a model przepisywalem chyba z 3 razy.

    PS. sorry za długi post.

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Warning: spl_object_hash() i metoda persist w kontrolerze
    29.01.2012, 16:48

    Witam serdecznie,

    ciąg dalszy walki w formularzami w symfony - tym razem problem przy zapisie.
    mam sobie kontroler:


    <?php

    namespace Explore\UserBundle\Controller;

    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Response;

    use Explore\SiteBundle\Entity\Attraction;
    use Explore\UserBundle\Form\AttractionType;

    class AttractionsController extends Controller{
    public function createAction(){
    $attraction = new Attraction();
    $form = $this->createForm(new AttractionType(), $attraction);
    $request = $this->getRequest();

    if ('POST' === $request->getMethod()){
    $form->bindRequest($request);
    if ($form->isValid()){
    $entity = $this->getDoctrine()->getEntityManager();
    $entity->persist($attraction);
    $entity->flush();
    return $this->redirect($this->generateUrl('ExploreUserBundle_createAttraction'));
    }
    }
    return $this->render('ExploreUserBundle:Attractions:create.html.twig', array('form' => $form->createView()));
    }
    }


    oraz mam plik AttractionType w ktorym buduje caly form.
    Wygląda on tak:

    <?php

    namespace Explore\UserBundle\Form;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;


    class AttractionType extends AbstractType{
    public function buildForm(FormBuilder $builder, array $options){
    $builder->add('category_id', 'entity', array('class' => 'ExploreSiteBundle:Category', 'property' => 'name', 'label' => 'Kategoria:'));
    $builder->add('title', 'text');
    $builder->add('city', 'text');
    $builder->add('level', 'choice', array('choices' => \Explore\SiteBundle\Repository\AttractionRepository::$attractionLevels, 'label' => 'Poziom trudności:'));
    $builder->add('attractive', 'choice', array('choices' => \Explore\SiteBundle\Repository\AttractionRepository::$attractionAttractive, 'label' => 'Atrakcyjność:'));
    }

    public function getDefaultOptions(array $options){
    return array('data_class' => 'Explore\SiteBundle\Entity\Attraction');
    }

    public function getName(){
    return 'attraction';
    }
    }


    Prościej się nie da. Mój problem polega na tym iż podczas wysylania post'a z formularza dostaje 500 i taki błąd:


    Warning: spl_object_hash() expects parameter 1 to be object, string given in /Users/pkrajewski/Sites/exploruj.to/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095


    wg dokumentacji symfony robię wszystko dobrze - http://symfony.com/doc/current/book/forms.html sekcja: "Forms and Doctrine"

    Moje pytanko jak zmusić kontroler do zapisu danych?Piotr Krajewski edytował(a) ten post dnia 29.01.12 o godzinie 16:51

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie formularz dodawania + relacja manyToMany
    26.01.2012, 23:10

    Witam,

    mam problem - staram sie zrobic formularz dodawania wpisu, który zawiera pole manyToMany z inną tablą. Niestety non stop mi to nie wychodzi.

    Poniżej kod:

    Entity Attraction


    <?php

    namespace Explore\SiteBundle\Entity;

    use Gedmo\Mapping\Annotation as Gedmo;
    use Doctrine\ORM\Mapping as ORM;

    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints\NotBlank;


    /**
    * Explore\SiteBundle\Entity\Attraction
    *
    * @ORM\Table(name="attractions")
    * @ORM\Entity(repositoryClass="Explore\SiteBundle\Repository\AttractionRepository")
    * @ORM\HasLifecycleCallbacks()
    */
    class Attraction
    {
    /**
    * @var integer $id
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @var integer $category_id
    * Relacja Category (1) : (n) Attraction - tworzy kolumne category_id - id kategori ktora nalezy do atrakcji
    *
    * @ORM\Column(name="category_id", type="integer")
    * @ORM\OneToMany(targetEntity="Category", mappedBy="attractions")
    */
    private $category_id;

    /**
    * @ORM\ManyToMany(targetEntity="Tag", inversedBy="attraction")
    * @ORM\JoinTable(name="attraction_tags",
    * joinColumns={@ORM\JoinColumn(name="attraction_id", referencedColumnName="id")},
    * inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
    * )
    */
    private $tags;

    public function getId(){
    return $this->id;
    }

    public function getTags(){
    return $this->tags;
    }
    }


    Entity Tag:

    <?php

    namespace Explore\SiteBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;

    /**
    * Explore\SiteBundle\Entity\Tag
    *
    * @ORM\Table(name="tags")
    * @ORM\Entity
    */
    class Tag
    {
    /**
    * @var integer $id
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @var string $tag
    *
    * @ORM\Column(name="tag", type="string", length=100)
    */
    private $tag;

    /**
    * @ORM\ManyToMany(targetEntity="Attraction", mappedBy="tags")
    */
    private $attraction;

    public function __construct(){
    $this->attraction = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getId(){
    return $this->id;
    }

    public function setTag($tag){
    $this->tag = $tag;
    }

    public function getTag(){
    return $this->tag;
    }
    }


    Form:

    <?php

    namespace Explore\UserBundle\Form;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;


    class AttractionType extends AbstractType
    {
    public function buildForm(FormBuilder $builder, array $options){
    $builder->add('category_id', 'choice', array('choices' => array(1 => '1'), 'label' => 'Kategoria:'));
    $builder->add('tags', 'text', array('label' => 'Tagi:'));
    }

    public function getName(){
    return 'attraction';
    }
    }


    Moje pytanie brzmi - jak dodac wpis "tags" do tabeli posredniej - "attraction_tags" w ktorej bedzie identyfikacja tabeli attractions i tabeli tags?

    Poki co dostaje bledy typu:

    Property "tags" is not public in class "Explore\SiteBundle\Entity\Attraction". Maybe you should create the method "setTags()"?


    wiem ze nie mam takiej metody ale nie wiem czy powinienem ja stworzyc i tam zrobic inserta do tabeli attraction_tags czy w inny sposob ?

  • Piotr Krajewski
    Wpis na grupie Zend Framework w temacie ZF i hosting
    16.01.2012, 23:28

    moze phpfog.com ?

  • Piotr Krajewski
    Wpis na grupie PHP w temacie CI, Kohana, Zend - Dwa nietechniczne pytania
    7.01.2012, 13:53

    Piotr P.:
    Ilu programistów tyle opinii.

    dokładnie, nie mniej jednak kazdy z nas ma jakies doswiadczenia z wiekszymi lub mniejszymi projektami i użytymi do ich budowy narzędziami.

    Ja do tej pory większość rzeczy stawiałem na Zendzie (często niewielki projekty, częstu duże) i strony działają. Ostatnimi czasy zainteresowałem się symfony2 (framework naprawdę fajny) dlatego też te narzędzie Ci polecę.

  • Piotr Krajewski
    Wpis na grupie Symfony 2.0 w temacie Twig vs Smarty
    9.12.2011, 20:30

    na stronie smarty drugi news tyczy sie tego testu :) wiec całkiem mozliwe ze to jest wpis sponsorowany :)

Dołącz do GoldenLine

Oferty pracy

Sprawdź aktualne oferty pracy

Aplikuj w łatwy sposób

Aplikuj jednym kliknięciem

Wyślij zaproszenie do