瀏覽代碼

products and user images

master
Daniel 2 年之前
父節點
當前提交
ce1c08d0a3
共有 100 個檔案被更改,包括 476 行新增21 行删除
  1. +69
    -0
      src/ApiResource/ProductApi.php
  2. +8
    -2
      src/DataFixtures/AppFixtures.php
  3. +17
    -0
      src/DataFixtures/FakeValues.php
  4. 二進制
      src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg
  5. 二進制
      src/DataFixtures/images/products/089-Ask-Bild1.jpg
  6. 二進制
      src/DataFixtures/images/products/145454_pIhFN2Ugm.webp
  7. 二進制
      src/DataFixtures/images/products/171651_1XE80u3Zy.webp
  8. 二進制
      src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg
  9. 二進制
      src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg
  10. 二進制
      src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg
  11. 二進制
      src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg
  12. 二進制
      src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg
  13. 二進制
      src/DataFixtures/images/products/4954227.png
  14. 二進制
      src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg
  15. 二進制
      src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp
  16. 二進制
      src/DataFixtures/images/products/6581938872383176.webp
  17. 二進制
      src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg
  18. 二進制
      src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg
  19. 二進制
      src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg
  20. 二進制
      emikalien.png
  21. 二進制
      src/DataFixtures/images/products/Bismuttrioxid.jpg
  22. 二進制
      src/DataFixtures/images/products/Chamikalien_1g-2.webp
  23. 二進制
      src/DataFixtures/images/products/Chemicals.png
  24. 二進制
      src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png
  25. 二進制
      src/DataFixtures/images/products/Chemikalien.jpg
  26. 二進制
      src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg
  27. 二進制
      tzmittel
  28. 二進制
      src/DataFixtures/images/products/IGB_6860.jpg
  29. 二進制
      src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg
  30. 二進制
      src/DataFixtures/images/products/Reagenzglas.jpg
  31. 二進制
      sch_Reinigungsmittel_Polymerprodukte.jpg
  32. 二進制
      src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg
  33. 二進制
      src/DataFixtures/images/products/a34880.jpg
  34. 二進制
      src/DataFixtures/images/products/a34885.jpg
  35. 二進制
      src/DataFixtures/images/products/abfall_chemikalien.jpg
  36. 二進制
      src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg
  37. 二進制
      src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg
  38. 二進制
      src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg
  39. 二進制
      src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp
  40. 二進制
      src/DataFixtures/images/products/bi2o3_chda_-2.jpg
  41. 二進制
      src/DataFixtures/images/products/bunte-chemikalien-12777275.webp
  42. 二進制
      src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg
  43. 二進制
      src/DataFixtures/images/products/chemikalien-1.jpg
  44. 二進制
      src/DataFixtures/images/products/chemikalien-artikel2.jpeg
  45. 二進制
      src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg
  46. 二進制
      src/DataFixtures/images/products/chemikalien-im-wasser.jpg
  47. 二進制
      src/DataFixtures/images/products/chemikalien.webp
  48. 二進制
      src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp
  49. 二進制
      src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg
  50. 二進制
      src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg
  51. 二進制
      src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp
  52. 二進制
      src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp
  53. 二進制
      src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg
  54. 二進制
      src/DataFixtures/images/products/greenpeace.avif
  55. 二進制
      src/DataFixtures/images/products/images.jpg
  56. 二進制
      src/DataFixtures/images/products/impact-story-Chemicals-cover.webp
  57. 二進制
      src/DataFixtures/images/products/istock-1355779437.jpg
  58. 二進制
      src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg
  59. 二進制
      src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg
  60. 二進制
      src/DataFixtures/images/products/leadImage.jpg
  61. 二進制
      src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg
  62. 二進制
      src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg
  63. 二進制
      src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg
  64. 二進制
      src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg
  65. 二進制
      src/DataFixtures/images/products/streitfall-chemikalien-wer.webp
  66. 二進制
      src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif
  67. 二進制
      src/DataFixtures/images/products/teaserbox_2419937771.jpg
  68. 二進制
      src/DataFixtures/images/products/teaserbox_2446472365.jpg
  69. 二進制
      src/DataFixtures/images/products/teaserbox_2449303018.jpg
  70. 二進制
      src/DataFixtures/images/products/teaserbox_2450499236.jpg
  71. 二進制
      src/DataFixtures/images/products/teaserbox_2462792495.jpg
  72. 二進制
      src/DataFixtures/images/products/teaserbox_2462830751.JPG
  73. 二進制
      src/DataFixtures/images/products/teaserbox_2473428103.JPG
  74. 二進制
      src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg
  75. 二進制
      src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp
  76. 二進制
      src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg
  77. 二進制
      src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg
  78. 二進制
      src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png
  79. 二進制
      src/DataFixtures/images/users/819027-brainy.jpg
  80. 二進制
      src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp
  81. 二進制
      src/DataFixtures/images/users/Handy_Comic_Book.webp
  82. 二進制
      src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp
  83. 二進制
      src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg
  84. 二進制
      src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg
  85. 二進制
      src/DataFixtures/images/users/images.jpg
  86. 二進制
      src/DataFixtures/images/users/images.png
  87. 二進制
      src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg
  88. 二進制
      src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg
  89. 二進制
      src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg
  90. 二進制
      src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg
  91. +2
    -1
      src/Entity/MediaObject.php
  92. +79
    -0
      src/Entity/Product.php
  93. +13
    -0
      src/Entity/User.php
  94. +1
    -1
      src/Factory/ContactFactory.php
  95. +1
    -1
      src/Factory/MediaObjectContactFactory.php
  96. +83
    -0
      src/Factory/MediaObjectProductFactory.php
  97. +83
    -0
      src/Factory/MediaObjectUserFactory.php
  98. +72
    -0
      src/Factory/ProductFactory.php
  99. +1
    -16
      src/Factory/UserFactory.php
  100. +47
    -0
      src/Mapper/ProductApiToEntityMapper.php

+ 69
- 0
src/ApiResource/ProductApi.php 查看文件

@@ -0,0 +1,69 @@
<?php
/**
* @author Daniel Knudsen <d.knudsen@spawntree.de>
* @date 12.12.23
*/


namespace App\ApiResource;


use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Doctrine\Orm\State\Options;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use App\Entity\MediaObject;
use App\Entity\Product;
use App\State\EntityClassDtoStateProcessor;
use App\State\EntityToDtoStateProvider;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
use Symfony\Component\Validator\Constraints\NotBlank;

#[ApiResource(
shortName: 'Product',
operations: [
new Get(
security: 'is_granted("ROLE_USER")'
),
new GetCollection(),
new Post(
security: 'is_granted("ROLE_USER")',
),
new Patch(
security: 'is_granted("ROLE_USER")',
),
new Delete(
security: 'is_granted("ROLE_ADMIN")',
)
],
order: ['name' => 'ASC'],
security: 'is_granted("ROLE_USER")',
provider: EntityToDtoStateProvider::class,
processor: EntityClassDtoStateProcessor::class,
stateOptions: new Options(entityClass: Product::class)
)]

#[ApiFilter(OrderFilter::class, properties: ['name'], arguments: ['orderParameterName' => 'order'])]
class ProductApi
{
#[ApiProperty(readable: false, writable: false, identifier: true)]
public ?int $id = null;

#[NotBlank]
public string $name;

public ?string $description = null;

public ?MediaObject $image = null;

#[ApiProperty(writable: false)]
public ?string $imageUrl = null;

public ?\DateTimeImmutable $createdAt = null;

}

+ 8
- 2
src/DataFixtures/AppFixtures.php 查看文件

@@ -5,9 +5,12 @@ namespace App\DataFixtures;
use App\Factory\CommentFactory;
use App\Factory\ContactFactory;
use App\Factory\MediaObjectLogoFactory;
use App\Factory\MediaObjectProfileFactory;
use App\Factory\MediaObjectProductFactory;
use App\Factory\MediaObjectContactFactory;
use App\Factory\MediaObjectUserFactory;
use App\Factory\PartnerFactory;
use App\Factory\PostingFactory;
use App\Factory\ProductFactory;
use App\Factory\UserFactory;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
@@ -34,6 +37,7 @@ class AppFixtures extends Fixture
}
}

MediaObjectUserFactory::createMany(20);
$adminD = UserFactory::createOne(
[
'email' => 'd.knudsen@spawntree.de',
@@ -57,9 +61,11 @@ class AppFixtures extends Fixture
UserFactory::createMany(10);
MediaObjectLogoFactory::createMany(50);
PartnerFactory::createMany(100);
MediaObjectProfileFactory::createMany(50);
MediaObjectContactFactory::createMany(50);
ContactFactory::createMany(200);
PostingFactory::createMany(200);
CommentFactory::createMany(300);
MediaObjectProductFactory::createMany(50);
ProductFactory::createMany(100);
}
}

+ 17
- 0
src/DataFixtures/FakeValues.php 查看文件

@@ -187,4 +187,21 @@ class FakeValues
"Systemadministrator", "Vertriebsingenieur", "Produktionsplaner", "Personalbeschaffer",
"Content Creator", "Bürokoordinator"
];

const PRODUCTS = [
'Oxidanol-X', 'Quantum Acidite', 'NeuroSolvent', 'HydroMystique', 'Luminaflux', 'Nanoglow Serum', 'Etherium Catalyst', 'BioSol ExoBlend',
'CryoSynth Elixir', 'NebulaVapour', 'Magnaflux Solvent', 'SynthoQuanta', 'QuantumSolve-X', 'PlasmaFusion Serum', 'ElectroLyte-X', 'SynthoBlast Acid',
'MegaMelt Radiant', 'Ionic Infusion X', 'QuantumBond Solvent', 'Molecular Surge', 'Etherium Enhancer', 'BioCryo Synthase', 'MagmaMyst Serum',
'HydroMyst Elixir', 'NeuroQuell Acid', 'PlasmaGlow Catalyst', 'NanoSizzle Blend', 'QuantumVortex X', 'VitaSynth Serum', 'CryoFusion Acid',
'RadiantQuanta Elixir', 'QuantumSurge Acid', 'NebulaRadiance Blend', 'Luminex Catalyst', 'ElectroPulse-X', 'CryoWave Serum', 'SynthoFlare Acid',
'Nanoglow Elixir', 'QuantumSpark Blend', 'MagnaFusion Catalyst', 'ElectroQuanta Acid', 'LuminarX Serum', 'NeuroWave-X', 'CryoSpark Acid',
'PlasmaQuanta Elixir', 'MegaCryo Catalyst', 'IonicQuell Blend', 'QuantumSizzle-X', 'NeuroRadiance Acid', 'NebulaFusion Serum', 'HydroQuanta X',
'RadiantFlare Blend', 'BioMyst Acid', 'SynthoVortex Serum', 'QuantumSurge-X', 'PlasmaQuell Blend', 'MolecularGlow Catalyst', 'Luminex Serum',
'ElectroWave Acid', 'CryoMyst Elixir', 'NeuroFusion Blend', 'NanoSizzle Acid', 'QuantumPulse Serum', 'MegaFlare-X', 'PlasmaRadiance Acid',
'SynthoQuanta Elixir', 'NebulaCryo Blend', 'HydroQuell Acid', 'RadiantFusion Serum', 'ElectroCryo-X', 'MolecularQuanta Acid', 'BioSpark Elixir',
'QuantumRadiance Blend', 'NanoFlare Acid', 'MagnaQuanta Serum', 'Luminex Catalyst-X', 'CryoFusion Elixir', 'NeuroQuell Blend', 'PlasmaMyst Acid',
'SynthoRadiance Serum', 'QuantumVortex-X', 'NebulaSpark Blend', 'HydroGlow Catalyst', 'RadiantQuanta Acid', 'ElectroMyst Elixir', 'MegaQuell Serum',
'CryoVortex Acid', 'NanoRadiance Blend', 'QuantumFusion Serum', 'SynthoFlare-X', 'PlasmaQuell Acid', 'MolecularGlow Blend', 'Luminex Catalyst-X',
'ElectroWave Serum', 'CryoMyst Acid', 'NeuroFusion Elixir', 'NanoSizzle Blend-X', 'QuantumPulse Acid', 'RadiantFlare Serum', 'BioQuanta Catalyst',
];
}

二進制
src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg 查看文件

Before After
Width: 750  |  Height: 500  |  Size: 40 KiB

二進制
src/DataFixtures/images/products/089-Ask-Bild1.jpg 查看文件

Before After
Width: 646  |  Height: 441  |  Size: 72 KiB

二進制
src/DataFixtures/images/products/145454_pIhFN2Ugm.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/171651_1XE80u3Zy.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg 查看文件

Before After
Width: 450  |  Height: 300  |  Size: 24 KiB

二進制
src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg 查看文件

Before After
Width: 1080  |  Height: 721  |  Size: 93 KiB

二進制
src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg 查看文件

Before After
Width: 661  |  Height: 980  |  Size: 50 KiB

二進制
src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg 查看文件

Before After
Width: 556  |  Height: 490  |  Size: 30 KiB

二進制
src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg 查看文件

Before After
Width: 1220  |  Height: 610  |  Size: 115 KiB

二進制
src/DataFixtures/images/products/4954227.png 查看文件

Before After
Width: 512  |  Height: 512  |  Size: 24 KiB

二進制
src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg 查看文件

Before After
Width: 894  |  Height: 877  |  Size: 43 KiB

二進制
src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/6581938872383176.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg 查看文件

Before After
Width: 761  |  Height: 1000  |  Size: 57 KiB

二進制
src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg 查看文件

Before After
Width: 525  |  Height: 525  |  Size: 60 KiB

二進制
src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg 查看文件

Before After
Width: 660  |  Height: 660  |  Size: 78 KiB

二進制
src/DataFixtures/images/products/Bild → emikalien.png 查看文件


二進制
src/DataFixtures/images/products/Bismuttrioxid.jpg 查看文件

Before After
Width: 650  |  Height: 500  |  Size: 98 KiB

二進制
src/DataFixtures/images/products/Chamikalien_1g-2.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/Chemicals.png 查看文件

Before After
Width: 610  |  Height: 350  |  Size: 26 KiB

二進制
src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png 查看文件

Before After
Width: 800  |  Height: 800  |  Size: 240 KiB

二進制
src/DataFixtures/images/products/Chemikalien.jpg 查看文件

Before After
Width: 360  |  Height: 477  |  Size: 8.0 KiB

二進制
src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg 查看文件

Before After
Width: 770  |  Height: 420  |  Size: 32 KiB

二進制
src/DataFixtures/images/products/Haushaltsreiniger → tzmittel 查看文件


二進制
src/DataFixtures/images/products/IGB_6860.jpg 查看文件

Before After
Width: 1000  |  Height: 563  |  Size: 65 KiB

二進制
src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg 查看文件

Before After
Width: 1200  |  Height: 600  |  Size: 88 KiB

二進制
src/DataFixtures/images/products/Reagenzglas.jpg 查看文件

Before After
Width: 895  |  Height: 502  |  Size: 130 KiB

二進制
src/DataFixtures/images/products/Unternehmen_Umweltauflagen_Bezug_Metallvearbeitungflüssigkeiten, → sch_Reinigungsmittel_Polymerprodukte.jpg 查看文件


二進制
src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg 查看文件

Before After
Width: 637  |  Height: 358  |  Size: 179 KiB

二進制
src/DataFixtures/images/products/a34880.jpg 查看文件

Before After
Width: 800  |  Height: 800  |  Size: 33 KiB

二進制
src/DataFixtures/images/products/a34885.jpg 查看文件

Before After
Width: 800  |  Height: 800  |  Size: 41 KiB

二進制
src/DataFixtures/images/products/abfall_chemikalien.jpg 查看文件

Before After
Width: 900  |  Height: 300  |  Size: 121 KiB

二進制
src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg 查看文件

Before After
Width: 960  |  Height: 540  |  Size: 61 KiB

二進制
src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg 查看文件

Before After
Width: 960  |  Height: 540  |  Size: 50 KiB

二進制
src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg 查看文件

Before After
Width: 378  |  Height: 378  |  Size: 11 KiB

二進制
src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/bi2o3_chda_-2.jpg 查看文件

Before After
Width: 1920  |  Height: 1280  |  Size: 1.7 MiB

二進制
src/DataFixtures/images/products/bunte-chemikalien-12777275.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg 查看文件

Before After
Width: 1024  |  Height: 538  |  Size: 56 KiB

二進制
src/DataFixtures/images/products/chemikalien-1.jpg 查看文件

Before After
Width: 533  |  Height: 400  |  Size: 17 KiB

二進制
src/DataFixtures/images/products/chemikalien-artikel2.jpeg 查看文件

Before After
Width: 987  |  Height: 392  |  Size: 43 KiB

二進制
src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg 查看文件

Before After
Width: 700  |  Height: 467  |  Size: 66 KiB

二進制
src/DataFixtures/images/products/chemikalien-im-wasser.jpg 查看文件

Before After
Width: 640  |  Height: 360  |  Size: 46 KiB

二進制
src/DataFixtures/images/products/chemikalien.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg 查看文件

Before After
Width: 727  |  Height: 545  |  Size: 53 KiB

二進制
src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg 查看文件

Before After
Width: 828  |  Height: 621  |  Size: 65 KiB

二進制
src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg 查看文件

Before After
Width: 800  |  Height: 400  |  Size: 86 KiB

二進制
src/DataFixtures/images/products/greenpeace.avif 查看文件


二進制
src/DataFixtures/images/products/images.jpg 查看文件

Before After
Width: 299  |  Height: 168  |  Size: 5.4 KiB

二進制
src/DataFixtures/images/products/impact-story-Chemicals-cover.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/istock-1355779437.jpg 查看文件

Before After
Width: 730  |  Height: 460  |  Size: 56 KiB

二進制
src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg 查看文件

Before After
Width: 470  |  Height: 470  |  Size: 30 KiB

二進制
src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg 查看文件

Before After
Width: 512  |  Height: 288  |  Size: 21 KiB

二進制
src/DataFixtures/images/products/leadImage.jpg 查看文件

Before After
Width: 800  |  Height: 450  |  Size: 50 KiB

二進制
src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg 查看文件

Before After
Width: 480  |  Height: 360  |  Size: 28 KiB

二進制
src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg 查看文件

Before After
Width: 360  |  Height: 360  |  Size: 6.8 KiB

二進制
src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg 查看文件

Before After
Width: 800  |  Height: 450  |  Size: 34 KiB

二進制
src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg 查看文件

Before After
Width: 960  |  Height: 600  |  Size: 206 KiB

二進制
src/DataFixtures/images/products/streitfall-chemikalien-wer.webp 查看文件

Before After

二進制
src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif 查看文件


二進制
src/DataFixtures/images/products/teaserbox_2419937771.jpg 查看文件

Before After
Width: 900  |  Height: 617  |  Size: 123 KiB

二進制
src/DataFixtures/images/products/teaserbox_2446472365.jpg 查看文件

Before After
Width: 781  |  Height: 554  |  Size: 189 KiB

二進制
src/DataFixtures/images/products/teaserbox_2449303018.jpg 查看文件

Before After
Width: 900  |  Height: 563  |  Size: 260 KiB

二進制
src/DataFixtures/images/products/teaserbox_2450499236.jpg 查看文件

Before After
Width: 800  |  Height: 585  |  Size: 181 KiB

二進制
src/DataFixtures/images/products/teaserbox_2462792495.jpg 查看文件

Before After
Width: 900  |  Height: 675  |  Size: 178 KiB

二進制
src/DataFixtures/images/products/teaserbox_2462830751.JPG 查看文件

Before After
Width: 900  |  Height: 620  |  Size: 273 KiB

二進制
src/DataFixtures/images/products/teaserbox_2473428103.JPG 查看文件

Before After
Width: 900  |  Height: 672  |  Size: 86 KiB

二進制
src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg 查看文件

Before After
Width: 800  |  Height: 550  |  Size: 81 KiB

二進制
src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp 查看文件

Before After

二進制
src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg 查看文件

Before After
Width: 320  |  Height: 320  |  Size: 25 KiB

二進制
src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg 查看文件

Before After
Width: 320  |  Height: 320  |  Size: 24 KiB

二進制
src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png 查看文件

Before After
Width: 792  |  Height: 752  |  Size: 22 KiB

二進制
src/DataFixtures/images/users/819027-brainy.jpg 查看文件

Before After
Width: 320  |  Height: 320  |  Size: 8.9 KiB

二進制
src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp 查看文件

Before After

二進制
src/DataFixtures/images/users/Handy_Comic_Book.webp 查看文件

Before After

二進制
src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp 查看文件

Before After

二進制
src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg 查看文件

Before After
Width: 564  |  Height: 800  |  Size: 50 KiB

二進制
src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg 查看文件

Before After
Width: 340  |  Height: 406  |  Size: 21 KiB

二進制
src/DataFixtures/images/users/images.jpg 查看文件

Before After
Width: 246  |  Height: 205  |  Size: 11 KiB

二進制
src/DataFixtures/images/users/images.png 查看文件

Before After
Width: 221  |  Height: 228  |  Size: 9.6 KiB

二進制
src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg 查看文件

Before After
Width: 250  |  Height: 250  |  Size: 5.5 KiB

二進制
src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg 查看文件

Before After
Width: 250  |  Height: 250  |  Size: 5.6 KiB

二進制
src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg 查看文件

Before After
Width: 250  |  Height: 250  |  Size: 7.5 KiB

二進制
src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg 查看文件

Before After
Width: 621  |  Height: 849  |  Size: 47 KiB

+ 2
- 1
src/Entity/MediaObject.php 查看文件

@@ -55,7 +55,8 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich;
// controller: DeleteMediaObjectAction::class
),
],
normalizationContext: ['groups' => ['media_object:read']]
normalizationContext: ['groups' => ['media_object:read']],
security: 'is_granted("ROLE_USER")',
)]
class MediaObject
{


+ 79
- 0
src/Entity/Product.php 查看文件

@@ -0,0 +1,79 @@
<?php

namespace App\Entity;

use App\Repository\ProductRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: ProductRepository::class)]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column(length: 255)]
private ?string $name = null;

#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;

#[ORM\ManyToOne]
private ?MediaObject $image = null;

#[ORM\Column]
private ?\DateTimeImmutable $createdAt = null;

public function __construct()
{
$this->createdAt = new \DateTimeImmutable();
}

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

public function getName(): ?string
{
return $this->name;
}

public function setName(string $name): static
{
$this->name = $name;

return $this;
}

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

public function setDescription(?string $description): static
{
$this->description = $description;

return $this;
}

public function getImage(): ?MediaObject
{
return $this->image;
}

public function setImage(?MediaObject $image): static
{
$this->image = $image;

return $this;
}

public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->createdAt;
}
}

+ 13
- 0
src/Entity/User.php 查看文件

@@ -27,6 +27,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\Column(length: 255)]
private ?string $lastName = null;

#[ORM\ManyToOne]
private ?MediaObject $image = null;

#[ORM\Column]
private array $roles = [];

@@ -151,6 +154,16 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this;
}

public function getImage(): ?MediaObject
{
return $this->image;
}

public function setImage(?MediaObject $image): void
{
$this->image = $image;
}

public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->createdAt;


+ 1
- 1
src/Factory/ContactFactory.php 查看文件

@@ -55,7 +55,7 @@ final class ContactFactory extends ModelFactory
'phone' => self::faker()->phoneNumber(),
'email' => self::faker()->email(),
'partner' => PartnerFactory::random(),
'image' => MediaObjectProfileFactory::random()
'image' => MediaObjectContactFactory::random()
];
}



src/Factory/MediaObjectProfileFactory.php → src/Factory/MediaObjectContactFactory.php 查看文件

@@ -31,7 +31,7 @@ use Zenstruck\Foundry\RepositoryProxy;
* @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = [])
*/
final class MediaObjectProfileFactory extends ModelFactory
final class MediaObjectContactFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services

+ 83
- 0
src/Factory/MediaObjectProductFactory.php 查看文件

@@ -0,0 +1,83 @@
<?php

namespace App\Factory;

use App\Entity\MediaObject;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpKernel\KernelInterface;
use Vich\UploaderBundle\FileAbstraction\ReplacingFile;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<MediaObject>
*
* @method MediaObject|Proxy create(array|callable $attributes = [])
* @method static MediaObject|Proxy createOne(array $attributes = [])
* @method static MediaObject|Proxy find(object|array|mixed $criteria)
* @method static MediaObject|Proxy findOrCreate(array $attributes)
* @method static MediaObject|Proxy first(string $sortedField = 'id')
* @method static MediaObject|Proxy last(string $sortedField = 'id')
* @method static MediaObject|Proxy random(array $attributes = [])
* @method static MediaObject|Proxy randomOrCreate(array $attributes = [])
* @method static EntityRepository|RepositoryProxy repository()
* @method static MediaObject[]|Proxy[] all()
* @method static MediaObject[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static MediaObject[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static MediaObject[]|Proxy[] findBy(array $attributes)
* @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = [])
*/
final class MediaObjectProductFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct(
private KernelInterface $appKernel
)
{
parent::__construct();
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
$projectRoot = $this->appKernel->getProjectDir();

$folderPath = $projectRoot . '/src/DataFixtures/images/products/';
$files = glob($folderPath . '*.*');
$randomFile = null;
if ($files !== false && count($files) > 0) {
$randomFile = $files[array_rand($files)];
}

return [
'file' => new ReplacingFile($randomFile)
];
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(MediaObject $mediaObject): void {})
;
}

protected static function getClass(): string
{
return MediaObject::class;
}
}

+ 83
- 0
src/Factory/MediaObjectUserFactory.php 查看文件

@@ -0,0 +1,83 @@
<?php

namespace App\Factory;

use App\Entity\MediaObject;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpKernel\KernelInterface;
use Vich\UploaderBundle\FileAbstraction\ReplacingFile;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<MediaObject>
*
* @method MediaObject|Proxy create(array|callable $attributes = [])
* @method static MediaObject|Proxy createOne(array $attributes = [])
* @method static MediaObject|Proxy find(object|array|mixed $criteria)
* @method static MediaObject|Proxy findOrCreate(array $attributes)
* @method static MediaObject|Proxy first(string $sortedField = 'id')
* @method static MediaObject|Proxy last(string $sortedField = 'id')
* @method static MediaObject|Proxy random(array $attributes = [])
* @method static MediaObject|Proxy randomOrCreate(array $attributes = [])
* @method static EntityRepository|RepositoryProxy repository()
* @method static MediaObject[]|Proxy[] all()
* @method static MediaObject[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static MediaObject[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static MediaObject[]|Proxy[] findBy(array $attributes)
* @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = [])
*/
final class MediaObjectUserFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct(
private KernelInterface $appKernel
)
{
parent::__construct();
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
$projectRoot = $this->appKernel->getProjectDir();

$folderPath = $projectRoot . '/src/DataFixtures/images/users/';
$files = glob($folderPath . '*.*');
$randomFile = null;
if ($files !== false && count($files) > 0) {
$randomFile = $files[array_rand($files)];
}

return [
'file' => new ReplacingFile($randomFile)
];
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(MediaObject $mediaObject): void {})
;
}

protected static function getClass(): string
{
return MediaObject::class;
}
}

+ 72
- 0
src/Factory/ProductFactory.php 查看文件

@@ -0,0 +1,72 @@
<?php

namespace App\Factory;

use App\DataFixtures\FakeValues;
use App\Entity\Product;
use App\Repository\ProductRepository;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<Product>
*
* @method Product|Proxy create(array|callable $attributes = [])
* @method static Product|Proxy createOne(array $attributes = [])
* @method static Product|Proxy find(object|array|mixed $criteria)
* @method static Product|Proxy findOrCreate(array $attributes)
* @method static Product|Proxy first(string $sortedField = 'id')
* @method static Product|Proxy last(string $sortedField = 'id')
* @method static Product|Proxy random(array $attributes = [])
* @method static Product|Proxy randomOrCreate(array $attributes = [])
* @method static ProductRepository|RepositoryProxy repository()
* @method static Product[]|Proxy[] all()
* @method static Product[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static Product[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static Product[]|Proxy[] findBy(array $attributes)
* @method static Product[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static Product[]|Proxy[] randomSet(int $number, array $attributes = [])
*/
final class ProductFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct()
{
parent::__construct();
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
return [
'name' => self::faker()->randomElement(FakeValues::PRODUCTS),
'description' => self::faker()->text(),
'image' => MediaObjectProductFactory::random(),
'createdAt' => \DateTimeImmutable::createFromMutable(self::faker()->dateTime()),
];
}

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(Product $product): void {})
;
}

protected static function getClass(): string
{
return Product::class;
}
}

+ 1
- 16
src/Factory/UserFactory.php 查看文件

@@ -31,22 +31,6 @@ use Zenstruck\Foundry\RepositoryProxy;
*/
final class UserFactory extends ModelFactory
{
const FIRST_NAMES = [
'Alice', 'Bob', 'Charlie', 'David', 'Emma',
'Frank', 'Grace', 'Henry', 'Ivy', 'Jack',
'Kate', 'Liam', 'Mia', 'Noah', 'Olivia',
'Paul', 'Quinn', 'Ryan', 'Sophia', 'Thomas',
'Ursula', 'Victor', 'Wendy', 'Xander', 'Yvonne'
];

const LAST_NAMES = [
'Smith', 'Johnson', 'Williams', 'Jones', 'Brown',
'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor',
'Anderson', 'Thomas', 'Jackson', 'White', 'Harris',
'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson',
'Clark', 'Lewis', 'Lee', 'Walker', 'Hall'
];

/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
@@ -68,6 +52,7 @@ final class UserFactory extends ModelFactory
'email' => self::faker()->email(),
'firstName' => self::faker()->firstName(),
'lastName' => self::faker()->lastName(),
'image' => MediaObjectUserFactory::random(),
'password' => "test",
'roles' => [],
];


+ 47
- 0
src/Mapper/ProductApiToEntityMapper.php 查看文件

@@ -0,0 +1,47 @@
<?php

namespace App\Mapper;

use App\ApiResource\ProductApi;
use App\Entity\Product;
use App\Repository\ProductRepository;
use Symfonycasts\MicroMapper\AsMapper;
use Symfonycasts\MicroMapper\MapperInterface;

#[AsMapper(from: ProductApi::class, to: Product::class)]
class ProductApiToEntityMapper implements MapperInterface
{
public function __construct(
private ProductRepository $repository
)
{

}

public function load(object $from, string $toClass, array $context): object
{
$dto = $from;
assert($dto instanceof ProductApi);

$entity = $dto->id ? $this->repository->find($dto->id) : new Product();
if (!$entity) {
throw new \Exception('Product not found');
}

return $entity;
}

public function populate(object $from, object $to, array $context): object
{
$dto = $from;
assert($dto instanceof ProductApi);
$entity = $to;
assert($entity instanceof Product);

$entity->setName($dto->name);
$entity->setDescription($dto->description);
$entity->setImage($dto->image);

return $entity;
}
}

部分文件因文件數量過多而無法顯示

Loading…
取消
儲存