Symfony 安装:
Created a Symfony project using Composer with the symfony/skeleton package.
Added the webapp package using Composer.
composer create-project symfony/skeleton:"7.0.*" symfony_test_app
composer require webapp
数据库设置:
Configured the database URL with credentials.
Created the database schema using Symfony's Doctrine commands.
DATABASE_URL =“mysql://用户名:密码@主机:端口/数据库名称?serverVersion = 10.4.28-MariaDB&charset = utf8mb4” php ./bin/console 学说:数据库:创建 php bin/console 学说:schema:update --force
Symfony 软件包安装:
Installed essential Symfony packages like symfony/orm-pack, symfony/form, symfony/maker-bundle, and symfony/framework-bundle.
Generated migrations, entities, forms, user authentication, etc., using Symfony's console commands.
composer require symfony/orm-pack
composer require symfony/form
composer require symfony/maker-bundle --dev
composer require symfony/framework-bundle
php bin/console make:migration
php bin/console make:entity
php bin/console make:form PersonType Person
php bin/console make:user
php bin/console make:auth
前端依赖:
Included Bootstrap and jQuery CDN links for styling and client-side scripting.
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
前端脚本:
Added JavaScript code to filter items based on categories using Bootstrap's button groups.
<script>
$(document).ready(function(){
$(".filter-button").click(function(){
var value = $(this).attr('data-filter');
if(value === "all") {
$('.filter').show('1000');
} else {
$(".filter").not('.'+value).hide('slow');
$('.filter').filter('.'+value).show('slow');
}
$(".filter-button").removeClass("active");
$(this).addClass("active");
});
});
</script>
Symfony 控制器:
Created a Symfony controller named RegistrierungController for handling user registration.
Defined a route /registrierung for accessing the registration form.
<?php
namespace App\Controller;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
class RegistrierungController extends AbstractController
{
#[Route('/registrierung', name: 'app_registrierung')]
public function reg(Request $request, EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher): Response
{
// Form handling logic here...
}
}
树枝模板:
Utilized Twig templating engine to render the registration form.
Extended the base template to maintain consistency across pages.
Rendered the registration form using Symfony's form rendering functions.
twig
{% extends 'base.html.twig' %}
{% block title %}Hello RegistrierungController!{% endblock %}
{% block body %}
<h1>RegistrierungController</h1>
{{ form_start(regform) }}
{{ form_widget(regform) }}
{{ form_end(regform) }}
{% endblock %}
前端组件:
Implemented a carousel component using Bootstrap's Carousel to display car details.
Dynamically populated car details using Twig's loop syntax.
Linked each carousel item to a detailed view page using Symfony's routing system.
<section>
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel" data-interval="3000">
<div class="carousel-inner">
{% for car in cars %}
<div class="carousel-item {% if loop.first %}active{% endif %}">
<h2>{{ car.getModel() }}</h2>
<img class="carousel-image" src="{{ asset('images/' ~ car.getImage()) }}" alt="{{ car.getBrand() }}">
<br>
<a class="details-button" href="{{ path('car_details', {'id': car.getId()}) }}">Click here for more details</a>
</div>
{% endfor %}
</div>
</div>
</section>
此设置提供了设置 Symfony 应用程序的全面指南,其中包含用户注册和前端组件(例如用于显示数据的过滤按钮和轮播)。
here would be the register controller logic
<?php
namespace App\Controller;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Attribute\Route;
class RegistrierungController extends AbstractController
{
#[Route('/registrierung', name: 'app_registrierung')]
public function reg(Request $request, EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher): Response
{
$regform = $this->createFormBuilder()
->add('username', TextType::class, ['label' => 'Mitarbeiter'])
->add('password', RepeatedType::class, [
'type' => PasswordType::class,
'required'=> true,
'first_options' => ['label' => 'Passwort'],
'second_options' => ['label'=> 'Passwort wiederholen']
])
->add('registrieren', SubmitType::class)
->getForm();
$regform->handleRequest($request);
//wurde der Submit-Button gedrückt!
if($regform->isSubmitted() && $regform->isValid()){
$eingabe = $regform->getData();
dump($eingabe);
$user = new User();
$user->setUsername(($eingabe['username']));
$user->setPassword($passwordHasher->hashPassword($user, $eingabe['password']));
$entityManager->persist($user);
$entityManager->flush();
return $this->redirect($this->generateUrl('car_home'));
}
return $this->render('registrierung/index.html.twig', [
'regform' => $regform->createView(),
]);
}
}
如何让图片显示出来:
Im Type --> bei bild -->
, FileType:class, ['mapped' => false])
Controller -->
$bild = $request->files->get('car')['bild'];
if ($bild) {
$dateiname = md5(uniqid()) . '.' . $bild->guessClientExtension();
}
$bild->move(
$this->getParameter('bilder_ordner'), $dateiname
);
$car->setBild($dateiname);
services.yaml -->
parameters:
bilder_ordner: '%kernel.project_dir%/public/bilder/'