Alors... Les problèmes provenaient de l'absence de getters et de setters pour les champs email et adresse du site web...
Voici le code corrigé avec les getters et des setters qui vont bien (dans le fichier src\Domain\Comment.php) :
// Nouveau code getters et setters pour email et l'Url
private $email;
private $website;
public function getEmail(){
return $this->email;
}
public function setEmail($email){
return $this->email = $email;
return $this;
}
public function getWebSite(){
return $this->website;
}
public function setWebSite($website){
return $this->website = $website;
return $this;
}
// Fin ajout des getters et des setters pour eamil et l'Url
Et là ça fonctionne. Encore merci pour votre aide.
Dernière question disons esthétique et de logique. Actuellement l'application me met les 2 champs email et url après le comment et le bouton Save. Je souhaiterai que ces 2 champs soient placé en premier avant le Comment et le bouton Save. Comment faut-il procédé ? En espérant ne pas abuser de votre patience.
Dans ton code corrigé les return $this ne seront pas atteints, tu vois que tu as des doubles return. Pour ta question je ne sais pas trop c'est pas dans la vue qu'est géré l'affichage de ton formulaire ou c'est dynamique (une sorte de builder ?)
PS: je ne suis pas ce tuto.
- Edité par WillyKouassi 18 septembre 2017 à 22:04:21
En effet vous avez raison il y a des "return" en trop...
Voici la correction :
// Nouveau code getters et setters pour email et l'Url
private $email;
private $website;
public function getEmail(){
return $this->email;
}
public function setEmail($email){
$this->email = $email;
return $this;
}
public function getWebSite(){
return $this->website;
}
public function setWebSite($website){
$this->website = $website;
return $this;
}
// Fin ajout des getters et des setters pour eamil et l'Url
bon j'ai le pb du The requested URL /article/1was not found on thisserver
et pourtant tout est ok :
- le .htaccess est bien dans le dossier web et correspond à celui du cours
- la ligne du httpd.conf concernant le rewrite est bien décommentée
- le vitualhost fonctionne bien puisque j'ai le home du site
- le Include conf/extra/httpd-vhosts.conf est décommenté aussi
- et le fichier host est correct (127.0.0.1 microcms)
donc là je ne comprend pas !!!!
et je ne peux pas avancer du coup
si quelqu'un peut me donner un coup de main (je fonctionne avec laragon pour le apache/php/mysql sous windows 10)
j'ai même téléchargé sur github l'ensemble de la correction de l'itération 7 en y rajoutant le dossier vendor et cela fait toujours la même chose, j'ai bien la page d'accueil qui s'affiche mais lorsque je veux cliquer sur un article il m'affiche bien dans l'url "microcms/article/1" mais me dit not found on this server !
cela me montre donc que cela ne viens pas de mon code mais plutôt du serveur apache ou du fichier .htaccess (mais j'ai exactement le même, à moins que laragon fonctionne différemment ????)
merci d'avance
Cordialement
- Edité par rolland.steph 6 octobre 2017 à 19:42:44
Bonsoir à tous, j'aurais grand besoin de votre aide pour une histoire de date…
Je n'ai plus vraiment de code à vous montrer car dans un excès de calme, j'ai supprimé pas mal de choses…
J'ai utilisé dans ma «Form» : DateType::class ...
lorsque je soumets le formulaire, cela me répond qu'il ne peut pas transformer un objet en string…
Je sais qu'il n'est pas de coutume de « trop » donner la solution, mais plutôt de laisser chercher… Si vous pouviez faire une exception, j'en ai réellement besoin !
use Doctrine\DBAL\Connection;
abstract class DAO
{
/**
* Database connection
*
* @var \Doctrine\DBAL\Connection
*/
private $db;
/**
* Constructor
*
* @param \Doctrine\DBAL\Connection The database connection object
*/
public function __construct(Connection $db) {
$this->db = $db;
}
/**
* Grants access to the database connection object
*
* @return \Doctrine\DBAL\Connection The database connection object
*/
protected function getDb() {
return $this->db;
}
/**
* Builds a domain object from a DB row.
* Must be overridden by child classes.
*/
protected abstract function buildDomainObject(array $row);
}
Fichier UserDAO :
<?php
namespace WebLinks\DAO;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use WebLinks\Domain\User;
class UserDAO extends DAO implements UserProviderInterface
{
/**
* Returns a user matching the supplied id.
*
* @param integer $id The user id.
*
* @return \WebLinks\Domain\User|throws an exception if no matching user is found
*/
public function find($id) {
$sql = "select * from t_user where usr_id=?";
$row = $this->getDb()->fetchAssoc($sql, array($id));
if ($row)
return $this->buildDomainObject($row);
else
throw new \Exception("No user matching id " . $id);
}
/**
* {@inheritDoc}
*/
public function loadUserByUsername($username)
{
$sql = "select * from t_user where usr_name=?";
echo "loadUserByUsername username : ".$sql. " ".$username;
$row = $this->getDb()->fetchAssoc($sql, array($username));
if ($row)
return $this->buildDomainObject($row);
else
throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
}
/**
* {@inheritDoc}
*/
public function refreshUser(UserInterface $user)
{
$class = get_class($user);
if (!$this->supportsClass($class)) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', $class));
}
return $this->loadUserByUsername($user->getUsername());
}
/**
* {@inheritDoc}
*/
public function supportsClass($class)
{
return 'WebLinks\Domain\User' === $class;
}
/**
* Creates a User object based on a DB row.
*
* @param array $row The DB row containing User data.
* @return \WebLinks\Domain\User
*/
protected function buildDomainObject(array $row) {
$user = new User();
$user->setId($row['usr_id']);
$user->setUsername($row['usr_name']);
$user->setPassword($row['usr_password']);
$user->setSalt($row['usr_salt']);
$user->setRole($row['usr_role']);
var_dump("objet user name : ".$row['usr_name']);
return $user;
}
}
Fichier LinkDAO :
<?php
namespace WebLinks\DAO;
use WebLinks\Domain\Links;
class LinkDAO extends DAO
{
/**
* Returns a list of all links, sorted by id.
*
* @return array A list of all links.
*/
public function findAll() {
$sql = "select * from t_link order by link_id desc";
$result = $this->getDb()->fetchAll($sql);
// Convert query result to an array of domain objects
$entities = array();
foreach ($result as $row) {
$id = $row['link_id'];
$entities[$id] = $this->buildDomainObject($row);
}
return $entities;
}
/**
* Creates an Links object based on a DB row.
*
* @param array $row The DB row containing Links data.
* @return \WebLinks\Domain\Links
*/
protected function buildDomainObject(array $row) {
$link = new Links();
$link->setId($row['link_id']);
$link->setUrl($row['link_url']);
$link->setTitle($row['link_title']);
return $link;
}
}
Fichier user dans src\Domain
<?php
namespace WebLinks\Domain;
use Symfony\Component\Security\Core\User\UserInterface;
class User implements UserInterface
{
/**
* User id.
*
* @var integer
*/
private $id;
/**
* User name.
*
* @var string
*/
private $username;
/**
* User password.
*
* @var string
*/
private $password;
/**
* Salt that was originally used to encode the password.
*
* @var string
*/
private $salt;
/**
* Role.
* Values : ROLE_USER or ROLE_ADMIN.
*
* @var string
*/
private $role;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
return $this;
}
/**
* @inheritDoc
*/
public function getUsername() {
echo "in getUsername : ".$this->username;
return $this->username;
}
public function setUsername($username) {
$this->username = $username;
echo "in setUsername : ".$username;
return $this;
}
/**
* @inheritDoc
*/
public function getPassword() {
return $this->password;
}
public function setPassword($password) {
$this->password = $password;
return $this;
}
/**
* @inheritDoc
*/
public function getSalt()
{
return $this->salt;
}
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
public function getRole()
{
return $this->role;
}
public function setRole($role) {
$this->role = $role;
return $this;
}
/**
* @inheritDoc
*/
public function getRoles()
{
return array($this->getRole());
}
/**
* @inheritDoc
*/
public function eraseCredentials() {
// Nothing to do here
}
}
Fichier Links dans src\Domain :
<?php
namespace WebLinks\Domain;
class Links
{
/**
* Links id.
*
* @var integer
*/
private $id;
/**
* Links title.
*
* @var string
*/
private $title;
/**
* Links url.
*
* @var string
*/
private $url;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
}
public function getTitle() {
return $this->title;
}
public function setTitle($title) {
$this->title = $title;
}
public function getUrl() {
return $this->url;
}
public function setUrl($url) {
$this->url = $url;
}
}
Fichier app :
<?php
use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\Debug\ExceptionHandler;
// Register global error and exception handlers
ErrorHandler::register();
ExceptionHandler::register();
// Register service providers
$app->register(new Silex\Provider\DoctrineServiceProvider());
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/../views',
));
$app->register(new Silex\Provider\AssetServiceProvider(), array(
'assets.version' => 'v1'
));
$app->register(new Silex\Provider\SessionServiceProvider());
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'secured' => array(
'pattern' => '^/',
'anonymous' => true,
'logout' => true,
'form' => array('login_path' => '/login', 'check_path' => '/login_check'),
'users' => function () use ($app) {
return new WebLinks\DAO\UserDAO($app['db']);
},
),
),
));
// Register services
$app['dao.link'] = function ($app) {
return new WebLinks\DAO\LinkDAO($app['db']);
};
$app['dao.user'] = function ($app) {
return new WebLinks\DAO\UserDAO($app['db']);
};
$app['dao.comment'] = function ($app) {
$commentDAO = new WebLinks\DAO\CommentDAO($app['db']);
$commentDAO->setArticleDAO($app['dao.article']);
$commentDAO->setUserDAO($app['dao.user']);
return $commentDAO;
};
Fichier routes :
<?php
use Symfony\Component\HttpFoundation\Request;
// Home page
$app->get('/', function () use ($app) {
$link = $app['dao.link']->findAll();
return $app['twig']->render('index.html.twig', array('links' => $link));
})->bind('home');
// Gestion des utilisateurs
$app->get('/login', function(Request $request) use ($app) {
return $app['twig']->render('login.html.twig', array(
'error' => $app['security.last_error']($request),
'last_username' => $app['session']->get('_security.last_username'),
));
})->bind('login');
Fichier configuration dev :
<?php
// include the prod configuration
require __DIR__.'/prod.php';
// enable the debug mode
$app['debug'] = true;
Voilà j'espère vous cela va vous permettre de me répondre car j'ai essayé tout les cas de figure possible (sauf apparemment le bon) et fait une recherche sur le web sans résultat. Encore merci pour votre aide...
chris79 je n'ai pas le temps de lire ton code désolée, mais pour le pb de connection que j'ai rencontré moi aussi, c'était un pb d'encodage du mot de passe et
Je n'arrive toujours pas à corriger mon problème. Quelqu'un aurait-il un idée pour m'aider car moi je ne vois pas où se trouve l'erreur. Tout ce que je sais c'est que l'application ne vas dans src\DAO\UserDAO.php ni dans src\Domain\User.php. Encore merci pour votre aide...
En effet vous avez raison il y a des "return" en trop...
Voici la correction :
// Nouveau code getters et setters pour email et l'Url
private $email;
private $website;
public function getEmail(){
return $this->email;
}
public function setEmail($email){
$this->email = $email;
return $this;
}
public function getWebSite(){
return $this->website;
}
public function setWebSite($website){
$this->website = $website;
return $this;
}
// Fin ajout des getters et des setters pour eamil et l'Url
Encore merci pour votre aide...
Ce que je peux te dire pour t'aider est d'avoir clairement à l'esprit qu'une fonction ne retourne qu' une et qu' une seule valeur. A moins que ce soit dans les structures de controle tels que if ou les boucles tels que while, for, do while ... où la fonction peut retourner une valeur spécifique selon une contidion donnée ( donc possibilité d' avoir plus d' un return au sein de la même fonction, une fonction ne retourne qu' une et qu' une seule valeur. Ce qui veut dire qu' il ne peut avoir qu' un seul return dans une fonction.
chris79 je n'ai pas le temps de lire ton code désolée, mais pour le pb de connection que j'ai rencontré moi aussi, c'était un pb d'encodage du mot de passe et
J'ai un fichier twig pour afficher un formulaire qui contient 2 controles textType. Le problème que je n'arrive pas à résoudre consiste à pouvoir récupérer la valeur des 2 champs de mon formulaire dans le fichier src\DAO\LinkDAO.
<?php
namespace WebLinks\DAO;
use WebLinks\Domain\Links;
use Symfony\Component\HttpFoundation\Request;
class LinkDAO extends DAO
{
/**
* @var \MicroCMS\DAO\ArticleDAO
*/
private $linkDAO;
public function setLinkDAO(LinkDAO $linkDAO) {
$this->linkDAO = $linkDAO;
}
/**
* Returns a list of all links, sorted by id.
*
* @return array A list of all links.
*/
public function findAll() {
$sql = "select * from t_link order by link_id desc";
$result = $this->getDb()->fetchAll($sql);
// Convert query result to an array of domain objects
$entities = array();
foreach ($result as $row) {
$id = $row['link_id'];
$entities[$id] = $this->buildDomainObject($row);
}
return $entities;
}
public function find($id) {
$sql = "select * from t_link where link_id=?";
$row = $this->getDb()->fetchAssoc($sql, array($id));
if ($row)
return $this->buildDomainObject($row);
else
throw new \Exception("No link matching id " . $id);
}
/**
* Creates an Link object based on a DB row.
*
* @param array $row The DB row containing Comment data.
* @return \WebLinks\Domain\Links
*/
public function recupChampformAddNewLink(Request $request)
{
// $_GET parameters
$test1 = $request->query->get('title');
// $_POST parameters
$test2 = $request->request->get('title');
$test3 = $request->request->get('title');
$test4 = $request->request->get('_title');
$test5 = $request->request->get('_url');
echo "<br />"."in récup : test1 GET : " .$test1;
echo "<br />"."in récup : test2 POST : " .$test2;
echo "<br />"."in récup : title : " .$test3;
echo "<br />"."in récup : _title : " .$test4;
echo "<br />"."in récup : _url : " .$test5;
}
protected function buildDomainObject(array $row) {
$link = new Links();
$link->setId($row['link_id']);
$link->setTitle($row['link_title']);
$link->setUrl($row['link_url']);
var_dump("Constuction objet : ", $link, " in linkDAO");
/*
if (array_key_exists('link_id', $row)) {
$linkId = $row['link_id'];
$links = $this->find($linkId);
$link->setLink($links);
}
*/
return $link;
}
/**
* Creates an Links object based on a DB row.
*
* @param array $row The DB row containing Links data.
* @return \WebLinks\Domain\Links
protected function buildDomainObject(array $row) {
$link = new Links();
$link->setId($row['link_id']);
$link->setUrl($row['link_url']);
$link->setTitle($row['link_title']);
return $link;
}
*/
/**
* Saves a link into the database.
*
* @param \WebLinks\Domain\Comment $comment The comment to save
*/
public function save($link) {
echo "in save";
var_dump("save objet : " ,$link);
/*
$linkData = array(
'link_id' => $link->getId(),
'link_title' => $link->getTitle(),
'link_url' => $link->getUrl()
);
*/
$links = $link;
var_dump($link);
/*
if ($link->getId()) {
// The link has already been saved : update it
echo "in update";
$this->getDb()->update('t_link', $linkData, array('link_id' => $link->getId()));
} else {
// The link has never been saved : insert it
echo "in insert data ...";
$this->getDb()->insert('t_link', $linkData);
// Get the id of the newly created comment and set it on the entity.
$id = $this->getDb()->lastInsertId();
$link->setId($id);
}
*/
}
}
Dans le fichier ci-dessus LinkDAO fait une fonction ( public function recupChampformAddNewLink(Request $request)) censer récupérer la valeur des champs de mon formulaire mais ça ne marche pas...
J'ai suivi le cours jusqu'au stockage des informations dans une base de données / "Ecrire des données" et je ne sais toujours pas (ou alors j'ai du sauter une étape) comment l'utilisateur peut envoyer ses informations via le formulaire que j'ai crée et l'écrire automatiquement sur mon serveur dans les champs que j'ai crée. C'est peut être une question un peu bête mais sans ça je suis bloqué.
Lorsque l'utilisateur clique sur le bouton envoyer cela ne m'affiche que la page php que j'ai codé en disant merci d'avoir répondu votre nom est".."..... mais rien sur mon serveur
J'ai crée il y a peu mon sous domaine : ofertamosaicos.pierdekor.com sur ARSYS, j'ai donc monté les dossiers sur la FTP avec le root approprié, ainsi que l'adresse DNS, tout est OK. Sauf qu'en lancant cette page, j'ai un message d'erreur m'indiquant un problème au niveau du PHP ou de sa configuration, je suis sous PHP 5.6.32.
Ouvre ton fichier CodeIgniter.php, il y a une constante CI_VERSION ou quelque part dans ton code fait echo CI_VERSION; Mais bon je suspecte que tu utilises une ancienne version de CodeIgniter.
Je n'ai jamais utilisé cette version de CodeIgniter mais je pense qu'il y a incompatibilité entre la version de PHP et celle de CI... Je te conseille de faire une MàJ de ta version de CI
Escuser moi mais comment faire en PHP un espace membre avev un pseudo, une adresse email, un mot de passe, et faire retaper le mot de passe et vérifier si ils sont identique ?
en local du genre WAMP, XAMMP , UWAMP etc... tu fais tous tes tests avant de partir en ligne.. Il y a eu beaucoup de changements entre la version que tu as et la version actuelle.. https://www.codeigniter.com/user_guide/installation/upgrading.html pour les instructions de MàJ.
Tu es novice jusqu'à quel point ? C'est toi qui a fait le site ? Sinon commence par le "commencement"
- Edité par WillyKouassi 21 novembre 2017 à 19:58:45
Je suis novice au point de connaitre l'informatique mais que de l'extérieur, c'est à dire toute la partie programmation et informatique poussé, je ne connais pas. Par exemple quand tu me parle de WAMP, XAMMP, etc.. Je ne comprends pas vraiment.
C'est un programmateur qui a fait mon site, c'est pour cela.
Tu peux jeter un coup d'oeil au lien du site en question, tu pourra voir le problème détaillé je pense : ofertamosaicos.pierdekor.com
Cours Architecture PHP professionnelle / Questions
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Déployez simplement votre site internet avec Dploy, Évoluez vers une architecture PHP professionnelle