Изучаю symfony 4, дико раздражает, что аннотации несут исполняющий код/надстройку. На сайте symfony не нашел инфы как работать с ORM без аннотаций, например вот код:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="integer")
*/
private $price;
public function getId()
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPrice(): ?int
{
return $this->price;
}
public function setPrice(int $price): self
{
$this->price = $price;
return $this;
}
}
Как по мне вообще не читабельно, как разобраться, есть ли способ их не использовать как например с маршрутами, для них есть отдельный файл. Если без них некуда, где найти вменяемую документацию, где будет описано, что делают аннотации
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
с переменной $id
. Сейчас в процессе обучения, все это создаю через консоль командами, там автогенерация всего этого, меня это просто ох**ть как бесит. Поделитесь кто разрабатывает на Symfony
, какие есть варианты? кроме учить вместо него Lavarel
?
Обычно держу конфиги в yaml Достаточно разместить в подпапке проекта Resources/config/doctrine/ файл <имя сущности>.orm.yml - он подхватится автоматически. (либо доконфигурить свой путь в настройках доктрины) Все конфиги на сайте Симфони даются в трех вариантах: аннотации, yaml, xml Напр. про маппинг
App\Entity\Product:
type: entity
# ...
manyToOne:
category:
targetEntity: App\Entity\Category
inversedBy: products
joinColumn:
nullable: false
Также можно описывать роутинг, валидацию и т.д. https://symfony.com/doc/4.1/bundles/configuration.html
Соглашусь, аннотации не супер удобно, но тут все на любителя. Я использую маппинги. Для примера:
config/packages/doctrine.yaml:
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_URL): ''
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_URL)%'
types:
carbondatetime: DoctrineExtensions\Types\CarbonDateTimeType
date: DoctrineExtensions\Types\CarbonDateType
time: DoctrineExtensions\Types\CarbonTimeType
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: yml
dir: '%kernel.project_dir%/src/Mappings'
prefix: 'App\Entity'
Mappings/User.orm.yml:
App\Entity\User:
type: entity
id:
userId:
type: guid
fields:
username:
type: string
length: 191
unique: true
email:
type: string
length: 191
unique: true
password:
type: text
lastLogin:
type: carbondatetime
nullable: true
createdAt:
type: carbondatetime
nullable: true
updatedAt:
type: carbondatetime
nullable: true
Entity/User.php:
<?php
namespace App\Entity;
use Carbon\Carbon;
use Ramsey\Uuid\Uuid;
/**
* Class User
* @package App\Entity
*/
class User
{
/**
* @var string
*/
private $userId;
/**
* @var string
*/
private $username;
/**
* @var string
*/
private $email;
/**
* @var string
*/
private $password;
/**
* @var Carbon
*/
protected $createdAt;
/**
* @var Carbon
*/
protected $updatedAt;
/**
* @var Carbon
*/
private $lastLogin;
/**
* User constructor.
*/
public function __construct()
{
$this->userId = Uuid::uuid4();
$this->createdAt = Carbon::now();
$this->updatedAt = Carbon::now();
}
/**
* @return string
*/
public function getUserId(): string
{
return $this->userId;
}
/**
* @return Carbon
*/
public function getCreatedAt(): Carbon
{
return $this->createdAt;
}
/**
* @return Carbon
*/
public function getUpdatedAt(): Carbon
{
return $this->updatedAt;
}
/**
* @return string
*/
public function getUsername(): string
{
return $this->username;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @return string
*/
public function getPassword(): string
{
return $this->password;
}
/**
* @param string $username
*
* @return User
*/
public function setUsername(string $username): User
{
$this->username = $username;
return $this;
}
/**
* @param string $email
*
* @return User
*/
public function setEmail(string $email): User
{
$this->email = $email;
return $this;
}
/**
* @param string $password
*
* @return User
*/
public function setPassword(string $password): User
{
$this->password = $password;
return $this;
}
/**
* @return Carbon
*/
public function getLastLogin(): Carbon
{
return $this->lastLogin;
}
/**
* @return User
*/
public function setLastLogin(): User
{
$this->lastLogin = Carbon::now();
return $this;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Установил на сайт WordPress рекламу Adsense в заранее подготовленные блоки-виджеты(без плагинов) вствил скриптУстанавливал обычные рекламные блоки,...
Мне нужно передавать данные в HEX на удаленное устройствоЕсли я пишу:
Пользователь вводит имя фигуры и нужно создать класс этой фигурыТо есть какой класс создавать определяется в runtime
Проблема заключается в том , что я пишу функцию для ввода пароля и логина , и мне надо скрыть символы пароля , те