我想从位于addaction()中的my controller advertcontroller.php中的实体广告在广告表中创建一行:
\symfony\src\oc\platformbundle\entity\advert.php:
<?php
namespace OC\PlatformBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="OC\PlatformBundle\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="author", type="string", length=255)
*/
private $author;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=255)
*/
private $content;
/**
* @ORM\Column(name="published", type="boolean")
*/
private $published = true;
public function __construct()
{
// Par défaut, la date de l'annonce est la date d'aujourd'hui
$this->date = new \Datetime();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set date.
*
* @param \DateTime $date
*
* @return Advert
*/
public function setDate($date)
{
$this->date = $date;
return $this;
}
/**
* Get date.
*
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* Set title.
*
* @param string $title
*
* @return Advert
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get title.
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set author.
*
* @param string $author
*
* @return Advert
*/
public function setAuthor($author)
{
$this->author = $author;
return $this;
}
/**
* Get author.
*
* @return string
*/
public function getAuthor()
{
return $this->author;
}
/**
* Set content.
*
* @param string $content
*
* @return Advert
*/
public function setContent($content)
{
$this->content = $content;
return $this;
}
/**
* Get content.
*
* @return string
*/
public function getContent()
{
return $this->content;
}
/**
* Set published.
*
* @param bool $published
*
* @return Advert
*/
public function setPublished($published)
{
$this->published = $published;
return $this;
}
/**
* Get published.
*
* @return bool
*/
public function getPublished()
{
return $this->published;
}
}
symfony\src\oc\platformbundle\controller\advertcontroller.php:
<?php
// src/OC/PlatformBundle/Controller/AdvertController.php
namespace OC\PlatformBundle\Controller;
// N'oubliez pas ce use :
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
class AdvertController extends Controller
{
public function indexAction()
{
// Notre liste d'annonce en dur
$listAdverts = array(
array(
'title' => 'Recherche développpeur Symfony',
'id' => 1,
'author' => 'Alexandre',
'content' => 'Nous recherchons un développeur Symfony débutant sur Lyon. Blabla…',
'date' => new \Datetime()),
array(
'title' => 'Mission de webmaster',
'id' => 2,
'author' => 'Hugo',
'content' => 'Nous recherchons un webmaster capable de maintenir notre site internet. Blabla…',
'date' => new \Datetime()),
array(
'title' => 'Offre de stage webdesigner',
'id' => 3,
'author' => 'Mathieu',
'content' => 'Nous proposons un poste pour webdesigner. Blabla…',
'date' => new \Datetime())
);
// Et modifiez le 2nd argument pour injecter notre liste
return $this->render('OCPlatformBundle:Advert:index.html.twig', array(
'listAdverts' => $listAdverts
));
}
public function menuAction($limit){
// On fixe en dur une liste ici, bien entendu par la suite
// on la récupérera depuis la BDD !
$listAdverts = array(
array('id' => 2, 'title' => 'Recherche développeur Symfony'),
array('id' => 5, 'title' => 'Mission de webmaster'),
array('id' => 9, 'title' => 'Offre de stage webdesigner')
);
return $this->render('OCPlatformBundle:Advert:menu.html.twig', array(
// Tout l'intérêt est ici : le contrôleur passe
// les variables nécessaires au template !
'listAdverts' => $listAdverts
));
}
public function viewAction($id)
{
$advert = array(
'title' => 'Recherche développpeur Symfony2',
'id' => $id,
'author' => 'Alexandre',
'content' => 'Nous recherchons un développeur Symfony2 débutant sur Lyon. Blabla…',
'date' => new \Datetime()
);
return $this->render('OCPlatformBundle:Advert:view.html.twig', array(
'advert' => $advert
));
}
public function editAction($id, Request $request)
{
// ...
$advert = array(
'title' => 'Recherche développpeur Symfony',
'id' => $id,
'author' => 'Alexandre',
'content' => 'Nous recherchons un développeur Symfony débutant sur Lyon. Blabla…',
'date' => new \Datetime()
);
return $this->render('OCPlatformBundle:Advert:edit.html.twig', array(
'advert' => $advert
));
}
public function addAction(Request $request)
{
$advert = new Advert();
$advert->setTitle('Recherc');
$advert->setAuthor('Alexandre');
$advert->setContent("Nous ");
// On peut ne pas définir ni la date ni la publication,
// car ces attributs sont définis automatiquement dans le constructeur
// On récupère l'EntityManager
$em = $this->getDoctrine()->getManager();
// Étape 1 : On « persiste » l'entité
$em->persist($advert);
// Étape 2 : On « flush » tout ce qui a été persisté avant
$em->flush();
// Si la requête est en POST, c'est que le visiteur a soumis le formulaire
return $this->render('OCPlatformBundle:Advert:add.html.twig');
}
}
但遗憾的是,它没有在mysql数据库中的广告表中创建行。
php bin/console doctrine:query:sql "SELECT * FROM advert"
**shows**
array(0) {
}
我的表为空且已存在:
mysql> describe advert;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date | datetime | NO | | NULL | |
| title | varchar(255) | NO | | NULL | |
| author | varchar(255) | NO | | NULL | |
| content | varchar(255) | NO | | NULL | |
| published | tinyint(1) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
mysql> select * from advert
-> ;
Empty set (0.00 sec)
mysql> show tables;
+-------------------+
| Tables_in_symfony |
+-------------------+
| advert |
+-------------------+
1 row in set (0.00 sec)
应用程序\config\config.yml:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: en
framework:
#esi: ~
#translator: { fallbacks: ['%locale%'] }
secret: '%secret%'
router:
resource: '%kernel.project_dir%/app/config/routing.yml'
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: '%locale%'
trusted_hosts: ~
session:
# https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
handler_id: session.handler.native_file
save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
fragments: ~
http_method_override: true
assets: ~
php_errors:
log: true
# Twig Configuration
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.project_dir%/var/data/data.sqlite"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
有什么解决办法吗?谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!