Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours Architecture PHP professionnelle / Questions

    16 septembre 2017 à 20:29:30

    Bonsoir,

    Alors... J'ai mis en place les getters et les setters pour l'email et l'url voici le code du fichier src\Domain\Comment.php (Class Comment) modifié :

    <?php
    
    namespace MicroCMS\Domain;
    
    class Comment
    {
        /**
         * Comment id.
         *
         * @var integer
         */
        private $id;
    
        /**
         * Comment author.
         *
         * @var \MicroCMS\Domain\User
         */
        private $author;
    
        /**
         * Comment content.
         *
         * @var integer
         */
    
        private $content;
    
        /**
         * Associated article.
         *
         * @var \MicroCMS\Domain\Article
         */
        private $article;
    
        // Nouveau code getters et setters pour email et l'Url
        private $email;
    
        private $url;
    
        public function getEmail(){
          return $this->email;
        }
    
        public function setEmail($email){
          return $this->email = $email;
          return $this;
        }
    
        public function getUrl(){
          return $this->url;
        }
    
        public function setUrl($url){
          return $this->url = $url;
          return $this;
        }
         // Fin ajout des getters et des setters pour eamil et l'Url
    
        public function getId() {
            return $this->id;
        }
    
        public function setId($id) {
            $this->id = $id;
            return $this;
        }
    
        public function getAuthor() {
            return $this->author;
        }
    
        public function setAuthor(User $author) {
            $this->author = $author;
            return $this;
        }
    
        public function getContent() {
            return $this->content;
        }
    
        public function setContent($content) {
            $this->content = $content;
            return $this;
        }
    
        public function getArticle() {
            return $this->article;
        }
    
        public function setArticle(Article $article) {
            $this->article = $article;
            return $this;
        }
    }
    
    

    Ensuite j'ai commenté comme demandé le return $app['twig'] du fichier app.php

    Mais l'erreur persiste il me retourne : 

    Whoops, looks like something went wrong.



    -
    Edité par chris79 16 septembre 2017 à 20:31:31

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2017 à 20:58:53

      Salut chris79,

      Tout ce qui vient après un return ne sera pas exécuté. Vérifie tes logs pour l'erreur

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        17 septembre 2017 à 3:21:16

        azerty

        -
        Edité par AlbertusMagnus 17 septembre 2017 à 3:23:06

        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2017 à 14:52:03

          Bonjour,

          C'est quoi les logs ?

          • Partager sur Facebook
          • Partager sur Twitter
            18 septembre 2017 à 16:23:41

            @Chris, Fichier de journalisation comme tu l'as précisé dans un de tes anciens messages
            • Partager sur Facebook
            • Partager sur Twitter
            le bienfait n'est jamais perdu
              18 septembre 2017 à 19:58:23

              Bonsoir,

              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.

              • Partager sur Facebook
              • Partager sur Twitter
                18 septembre 2017 à 22:01:10

                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

                • Partager sur Facebook
                • Partager sur Twitter
                le bienfait n'est jamais perdu
                  18 septembre 2017 à 22:59:31

                  Bonsoir,

                  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...



                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 octobre 2017 à 17:14:17

                    bonjour,

                    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

                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 octobre 2017 à 20:49:28

                      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 !
                      Je vous remercie par avance.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 octobre 2017 à 14:53:25

                        avec du code c'est mieux

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Déployez simplement votre site internet avec Dploy, Évoluez vers une architecture PHP professionnelle

                          20 octobre 2017 à 22:32:38

                          Bonsoir,

                          J'ai un problème avec l'authentification d'un user. L'application me répond : Login failed! Bad credentials.

                          L'application ne va pas dans src\DAO\linkDAO et je ne comprend pas pourquoi.

                          Voici quelques fichiers de mon application :

                          Vue : template de login

                          {% extends 'layout.html.twig' %}
                          
                          {% block title %}User authentication{% endblock %}
                          
                          {% block content %}
                          <h2 class="text-center">{{ block('title') }}</h2>
                          
                          erreur : {{error}}
                          
                          {% if error %}
                          <div class="alert alert-danger">
                              <strong>Login failed!</strong> {{ error }}
                          </div>
                          {% endif %}
                          <div class="well">
                              <form class="form-signin form-horizontal" role="form" action="{{ path('login_check') }}" method="post">
                                  <div class="form-group">
                                      <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                      <input type="text" name="_username" value="{{ last_username }}" class="form-control" placeholder="Enter your username" required autofocus>
                                      </div>
                                  </div>
                                  <div class="form-group">
                                      <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                          <input type="password" name="_password" class="form-control" placeholder="Enter your password" required>
                                      </div>
                                  </div>
                                  <div class="form-group">
                                      <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                          <button type="submit" class="btn btn-default btn-primary"><span class="glyphicon glyphicon-log-in"></span> Login</button>
                                      </div>
                                  </div>
                              </form>
                          </div>
                          {% endblock %}

                          Vue du layout :

                          <!doctype html>
                          <html>
                          <head>
                              <meta charset="utf-8">
                              <meta http-equiv="X-UA-Compatible" content="IE=edge">
                              <meta name="viewport" content="width=device-width, initial-scale=1">
                          	<link href="{{ global.request.basepath }}/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
                          	<link href="{{ global.request.basepath }}/css/weblinks.css" rel="stylesheet">
                              
                          	
                              <title>WebLinks - {% block title %}{% endblock %}</title>
                          </head>
                          <body>
                             <div class="container">
                                  <nav class="navbar navbar-default navbar-fixed-top navbar-inverse" role="navigation">
                                      <div class="container">
                                          <div class="navbar-header">
                                              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-target">
                                                  <span class="icon-bar"></span>
                                                  <span class="icon-bar"></span>
                                                  <span class="icon-bar"></span>
                                              </button>
                                              <a class="navbar-brand" href="{{ path('home') }}">WebLinks</a>
                                          </div>
                                          <div class="collapse navbar-collapse" id="navbar-collapse-target">
                                              <ul class="nav navbar-nav navbar-right">
                                                  {% if is_granted('IS_AUTHENTICATED_FULLY') %}
                                                      <li class="dropdown">
                                                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                                          <span class="glyphicon glyphicon-user"></span> Welcome, {{ app.user.username }} <b class="caret"></b></a>
                                                          <ul class="dropdown-menu">
                                                              <li><a href="{{ path('logout') }}">Log out</a></li>
                                                          </ul>
                                                      </li>
                                                  {% else %}
                                                      <li class="dropdown">
                                                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                                          <span class="glyphicon glyphicon-user"></span> Not connected <b class="caret"></b></a>
                                                          <ul class="dropdown-menu">
                                                              <li><a href="{{ path('login') }}">Log in</a></li>
                                                          </ul>
                                                      </li>
                                                  {% endif %}
                                              </ul>
                                          </div>
                                      </div><!-- /.container -->
                                  </nav>
                                  {% autoescape %} 
                                  <div id="content">{% block content %}{% endblock %}</div>
                                  {% endautoescape %} 
                          		
                              </div>
                          
                          	<!-- jQuery -->
                              <script src="{{ asset('/lib/jquery/jquery.min.js') }}"></script>
                              <!-- JavaScript Boostrap plugin -->
                              <script src="{{ asset('/lib/bootstrap/js/bootstrap.min.js') }}"></script>
                          	</body>
                          </html>

                          Fichier : DAO.php

                          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;
                          

                          Fichier configuration prod :

                          <?php
                          
                          // Doctrine (db)
                          $app['db.options'] = array(
                              'driver'   => 'pdo_mysql',
                              'charset'  => 'utf8',
                              'host'     => 'localhost',
                              'port'     => '3306',
                              'dbname'   => 'weblinks',
                              'user'     => 'weblinks_user',
                              'password' => 'secret',
                          );
                          

                          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...












                          -
                          Edité par chris79 20 octobre 2017 à 22:35:15

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 octobre 2017 à 23:57:19

                            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 

                            la réponse est là 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 octobre 2017 à 19:48:46

                              Bonsoir,

                              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...

                              Problème résolu cf. réponse ci-dessus d'Anne-Marie Savary.

                              -
                              Edité par chris79 23 octobre 2017 à 9:17:27

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 octobre 2017 à 3:53:13

                                chris79 a écrit:

                                Bonsoir,

                                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. 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Kossi
                                  23 octobre 2017 à 9:14:08

                                  Anne-Marie Savary a écrit:

                                  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 

                                  la réponse est là 

                                  Merci beaucoup pour votre aide. J'ai trouvé mon bonheur dans le lien que vous m'avez donné. 

                                  J'ai modifier dans app\app.php la "structure" Silex\Provider\SecurityServiceProvider comme suit :

                                  $app->register(new Silex\Provider\SecurityServiceProvider(), array(
                                  	'security.role_hierarchy' => array( 'ROLE_ADMIN' => array('ROLE_USER'),),
                                  	'security.access_rules' => array(array('^/admin','ROLE_ADMIN'),array('^/link/submit','ROLE_USER')),
                                  	'security.default_encoder' => function () use ($app){return $app['security.encoder.digest'];} ,
                                      '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']);
                                              },
                                  		),
                                      ),
                                  ));

                                  Et là ça marche... Encore merci et bonne journée.


                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 octobre 2017 à 21:19:38

                                    Autre problème...

                                    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.

                                    Voici les 2 fichiers.

                                    Le premier : addNewLink.htlm.twig 

                                    {% extends 'layout.html.twig' %}
                                    
                                    {% block title %}New Link{% endblock %}
                                    
                                    {% block content %}
                                    <h2 class="text-center">{{ block('title') }}</h2>
                                    
                                    <div class="well">
                                    
                                        <form class="form-signin form-horizontal" role="form" action="" method="post">
                                        
                                    		<div class="form-group">
                                                <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                                <input type="text" name="_title" class="form-control" placeholder="Enter a title" required autofocus>
                                                </div>
                                            </div>
                                            <div class="form-group">
                                                <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                                    <input type="text" name="_url" class="form-control" placeholder="Enter an URL" required>
                                                </div>
                                            </div>
                                            <div class="form-group">
                                                <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
                                                    <button id="submit" name="submit" class="btn btn-primary" value="1">Add this link</button>
                                        <a href="addNewLink" id="cancel" name="cancel" class="btn btn-default">Cancel</a>
                                                </div>
                                            </div>
                                        </form>
                                    </div>
                                    
                                    {% endblock %}

                                    Voici le second. 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...

                                    Encore merci pour votre aide...





                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 novembre 2017 à 4:30:57

                                      Bonjour,

                                      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 :(

                                      Si quelqu'un pouvait m'aider : Merci d'avance !

                                      -
                                      Edité par YithySensei 3 novembre 2017 à 4:39:36

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 novembre 2017 à 15:22:35

                                        Salut @YithySensei

                                        Si tu pouvais nous montrer les fichiers concernés tu auras plus d'aide.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 novembre 2017 à 19:58:01

                                          Bonsoir,
                                          Je rencontre un problème lorsque j'utilise   $linkForm = $app['form.factory']->create(LinkType::class, $link);
                                          L'application me retourne une erreur mais sans aucun détail juste le message : Whoops, looks like something went wrong.
                                          Voici le code en question dans le contrôleur qui le met en oeuvre :
                                           /**
                                               * Edit link controller.
                                               *
                                               * @param integer $id Links id
                                               * @param Request $request Incoming request
                                               * @param Application $app Silex application
                                               */
                                               public function editLInkAction($id, Request $request, Application $app) {
                                          		 
                                          		$link = $app['dao.link']->find($id);
                                                  $linkForm = $app['form.factory']->create(LinkType::class, $link);
                                                  $linkForm->handleRequest($request);
                                          	
                                                  if ($linkForm->isSubmitted() && $linkForm->isValid()) {
                                                      $app['dao.link']->save($link);
                                                      $app['session']->getFlashBag()->add('success', 'The link was successfully updated.');
                                                  }
                                                  return $app['twig']->render('link_form.html.twig', array(
                                                      'title' => 'Edit link',
                                                      'linkForm' => $linkForm->createView()));
                                              }
                                          
                                          En vous remerciant d'avance pour votre aide...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 novembre 2017 à 12:00:34

                                            Bonjour à tous, 
                                            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. 
                                            Je vous invite à regarder sur mon site les 2 messages d'erreur : ofertamosaicos.pierdekor.com
                                            Aidé moi s'il vous plait. 
                                            Simon
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 novembre 2017 à 13:42:16

                                              Salut, Simon

                                              Tu utilises quelle version de CodeIgniter ?

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              le bienfait n'est jamais perdu
                                                21 novembre 2017 à 12:07:56

                                                Bonjour Willy,

                                                Je ne sais pas quelle est ma version , comment puis-je le savoir ?

                                                Merci beaucoup

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  21 novembre 2017 à 14:54:26

                                                  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.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  le bienfait n'est jamais perdu
                                                    21 novembre 2017 à 18:02:47

                                                    D'accord,

                                                    J'ai appliqué ce que tu m'as dis et c'est donc la version 2.1.4

                                                    Salutations. 

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      21 novembre 2017 à 18:31:24

                                                      Ouais mais c'est "vieux" quand même..

                                                      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

                                                      Tu as au moins un environnement en local non ? 

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      le bienfait n'est jamais perdu
                                                        21 novembre 2017 à 18:42:03

                                                        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 ?

                                                        Merci d'avance

                                                        -
                                                        Edité par Gol.D.eNI 21 novembre 2017 à 19:03:47

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          21 novembre 2017 à 19:21:40

                                                          D'accord merci bien, mais comment faire cette Màj s'il te plait? 

                                                          Je comprend pas trop le fait "d'environnement local"

                                                          Je suis un novice en programmation, etc..

                                                          Merci de ton aide. 

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            21 novembre 2017 à 19:58:27

                                                            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

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            le bienfait n'est jamais perdu
                                                              22 novembre 2017 à 10:34:54

                                                              Bonjour,

                                                              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

                                                              Merci de ton aide. 

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              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.
                                                              • Editeur
                                                              • Markdown