Symfony 3.4 jaką komendą stworzyć nowy model(tak to się nazywało w laravelu) albo encje

1

Mam takie pytanie jaką komendą stworzyć nową encje, żeby potem mógł operowac na tym obiekcie tak jak w laravelu bo taką encje mam stworzoną i jest w katalogu ./src/Entity tylko, stworzenie bazy danych z tymi tabelami przez symfony już się nie powiodło był tylko komunikat, że nie ma nic do roboty i tabel stworzyłem ręcznie

Ten kod zwraca mi
Class 'AppBundle\Controller\Users' does not exist

<?php

namespace AppBundle\Controller;
use AppBundle\Entity\Task;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use AppBundle\Entity\User;

//use Symfony\Component\HttpFoundation\Request;

class InstallController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {

        
        $es = $this->getDoctrine()->getManager();
        $s = $es->getRepository(Users::class)->findAll();
        return $this->render('install/index.html.twig',["s" => $s]);
        
        
        //return $this->render('install/index.html.twig');
        // replace this example code with whatever you need
        //return $this->render("");
        //return $this->render('default/index.html.twig', [
            //'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
        //]);
    }
    
    public function submitAction() {
         $product = new User();
     $product->setName('A Foo Bar');
     $product->setPrice('19.99');
     $product->setDescription('Lorem ipsum dolor');

     $em = $this->getDoctrine()->getManager();

     $em->persist($product);
     $em->flush();
        return $this->render('admin/index.html.twig',[
            'login' => $_POST["login"],
        ]);
        
        //print $input->getArgument('login');
    }
}

Jestem kompletnie zielony jeżeli chodzi o symfony.

0

Coś słabo Ci idzie korzystanie z porad wujka google
https://symfony.com/doc/3.4/doctrine.html#creating-an-entity-class

A wystarczyło wpisać symfony command line create entity 3.4

Skoro dopiero się uczysz, to tym bardziej zachęcam do korzystania z oficjalnej dokumentacji.

0

Ja długo szukałem na google i też uzywałem tego polecenia

php bin/console doctrine:generate:entity

I nic nie dało mam nawet wykupiony kurs
https://strefakursow.pl/kursy/programowanie/kurs_symfony_3_-_praktyczny_projekt_od_podstaw.html

0

Pokaż ciało obiektu AppBundle\Entity\User. Jeżeli jest gdzieś skopany to nie wygenerujesz na jej podstawie schematu bazy. Magia adnotacji symfony zarówno się je kocha jak i nienawidzi. (to drugie chyba bardziej :D )

0
Darkabso napisał(a):

Pokaż ciało obiektu AppBundle\Entity\User. Jeżeli jest gdzieś skopany to nie wygenerujesz na jej podstawie schematu bazy. Magia adnotacji symfony zarówno się je kocha jak i nienawidzi. (to drugie chyba bardziej :D )

Users
use AppBundle\Entity\Users;
Bo s zabrakło

<?php

namespace AppBundle\Entity;

/**
 * Users
 */
class Users
{
    /**
     * @var int
     */
    private $id;

    /**
     * @var string
     */
    private $login;


    /**
     * Get id.
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set login.
     *
     * @param string $login
     *
     * @return Users
     */
    public function setLogin($login)
    {
        $this->login = $login;

        return $this;
    }

    /**
     * Get login.
     *
     * @return string
     */
    public function getLogin()
    {
        return $this->login;
    }
}

0

I teraz tak, jeżeli nie posiadasz konfiguracji encji w żadnym yml, xml (a to racze rzadkość w symfony), to musisz zdefiniować je w obiekcie za pomocą adnotacji. Czyli w skrócie doctrine i symfony używa adnotacji (komentarzy xD ) lub plików yaml do budowania właściwych obiektów. W twoim wypadku przykładowo encja może wyglądać:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Users
{
    /**
     * @var int
	 *
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
	 *
     * @ORM\Column(type="string", length=255)
     */
    private $login;

    /**
     * Get id.
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set login.
     *
     * @param string $login
     *
     * @return Users
     */
    public function setLogin($login)
    {
        $this->login = $login;

        return $this;
    }

    /**
     * Get login.
     *
     * @return string
     */
    public function getLogin()
    {
        return $this->login;
    }
}

Więcej o samym doctrine znajdziesz tutaj: https://www.doctrine-project.org

0

Weź przenieś się na najnowsze SF, bo różnica między 4.3 a 3.4 jest dość spora.

0
serek napisał(a):

Weź przenieś się na najnowsze SF, bo różnica między 4.3 a 3.4 jest dość spora.

Pewnie, że jest dość spora i to na plus. Ale do momentu aż Symfony 4 nie będzie LTS to jego wybór nie jest najlepszym pomysłem, a firmy będą wybierać 3.4 , który ma wsparcie do 2022 roku. :)

0
Darkabso napisał(a):
serek napisał(a):

Weź przenieś się na najnowsze SF, bo różnica między 4.3 a 3.4 jest dość spora.

Pewnie, że jest dość spora i to na plus. Ale do momentu aż Symfony 4 nie będzie LTS to jego wybór nie jest najlepszym pomysłem, a firmy będą wybierać 3.4 , który ma wsparcie do 2022 roku. :)

Tak, ale release wersji 4.4 to jest kwestie chyba 5 miesięcy, wtedy już będzie 4.4 częściej wybierane, a nie 3.4. Więc jak najbardziej opłaca się uczyć już najnowszej wersji.

Zresztą naukę na starych wersjach uważam za bezsens (w większości przypadków). To tak jakby teraz ktoś uczył się na PHP 5.6 a nie na 7.x. Zawsze się czegoś nauczy, nawet jak wybierze starą wersję, ale już na start będzie sporo do tyłu z rynkiem, a przecież nie o to chodzi.

0

Najsensowniej uczyć się wersji LTS, a nie jakichś pośrednich które są wspierane przez kilka miechów, czy tam góra rok.

1
TomRZ napisał(a):

Najsensowniej uczyć się wersji LTS, a nie jakichś pośrednich które są wspierane przez kilka miechów, czy tam góra rok.

Tak, ale w przypadku SF nowe LTS wychodzi pod koniec tego roku, więc warto już się uczyć najnowszej wersji. Zwłaszcza że OP dopiero się uczy SF, więc zanim coś tam będzie porządniej umiał, to ta wersja LTS już wyjdzie.

0

A pytanie zasadnicze, czy stworzyłeś baze schemat i migracje doctrinwymi komendami? bo z tego co widzę to chyba nie, co do konfiguracji wstępnej to w pliku .env wystaryczy że dodasz localhosta i usera i hasło i powinno to działać, powinienieś do swojej encji dodać jeszcze *@ORM\Table(name="users"), choć juz nie pamietam czy jest to obowiązkowe, w pierwszym pliku eksportujesz use AppBundle\Entity\User; a encje masz Users i prawdopodobnie dlatego dostajesz błąd.

W drugiej funkcji masz $product = new User(); a encja to Users zdecyduj sie czy masz User czy Users

0

No właśnie nie mam pliku w głównym katalogu .env, a nie dał≤o się stworzyć encji komedną ani migracji.

0

Jak tworzyłeś projekt? composerem? jeśli nie to zainstaluj composer i użyj komendy composer create-project symfony/skeleton nazwa_projektu i tam masz base_project , dodajesz doctrina bo w statndardzie chyba nie ma,w pliku composer.json dodajesz :
{ "require": { "doctrine/orm": "*" } }
robisz composer update i masz doctrina
w pliku .env doadjesz co ci wyżej napisałem, dodajesz te dwie klasy i musi to działać
pod warunkiem że poprawisz namespace User albo Users

0

Nie wiem czy jest sens brać się za trudniejsze symfony z yaml, twig, doctrine, gdzie sporo osób klęka już w procesie instalki, konfigu bazy itp, ledwie co przyswoiłeś larwę to lepiej podbijaj skilla w niej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1