J'ai malheureusement pas pu envoyer mon devoir hier, faute peut-être de temps, car je suis quand même très occupé et j'aimerais savoir si c'est possible que je soumette mon Activité 1 avant la fin des corrections.
Juste un petit message à mes correcteurs qui me signalent que je n'ai rien compris à la POO. C'est TOTALEMENT exact. Je dois dire que je tente de comprendre le cours...et je rame assez bien (je ne suis pas développeur de formation).
Je les remercie pour leurs commentaires constructifs et encourageants. Je pense qu'il faut que je m'attaque à la POO sérieusement afin de mieux appréhender ce genre de cours.
La suite ne s'annonce pas évidente....mais je m'accroche.
Merci aussi au créateur de ce cours qui est extrêmenent bien fait. Il m'aidera certainement par la suite.
Juste un petit message à mes correcteurs qui me signalent que je n'ai rien compris à la POO. C'est TOTALEMENT exact. Je dois dire que je tente de comprendre le cours...et je rame assez bien (je ne suis pas développeur de formation).
Je les remercie pour leurs commentaires constructifs et encourageants. Je pense qu'il faut que je m'attaque à la POO sérieusement afin de mieux appréhender ce genre de cours.
La suite ne s'annonce pas évidente....mais je m'accroche.
Merci aussi au créateur de ce cours qui est extrêmenent bien fait. Il m'aidera certainement par la suite.
Bonjour,
Merci pour les remerciements
Il est vrai que ce cours a un pré-requis "caché" qui est la POO. Même si j'ai essayé de minimiser la complexité, il vaut mieux avoir quelques bases sur ce sujet pour avancer confortablement. Je vous conseille d'étudier le début (paragraphes 1 et 2 du 1er chapitre) du cours OpenClassrooms sur la POO en PHP, ainsi que cette introduction bien faite. Pour aller un peu plus loin, vous pouvez essayer de lire mon cours sur le sujet, notamment le chapitre sur la relation d'association. Il utilise le langage C# pour les exemples de code, mais les concepts expliqués sont les mêmes.
Totalement débutant avec silex, POO et twig, je rame depuis 3 jours. Mon devoir est à la correction mais les liens vers le détail d'un livre ne fonctionne pas. J'ai repris plusieurs fois depuis le début sans succès.
Aucun souci avec le Vhost, le sql, intégration bootstrap, silex et twig.
après avoir ajouté le décodeur json, je n'arrive plus a accéder à l'application.
// Register JSON data decoder for JSON requests
$app->before(function (Request $request) {
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$data = json_decode($request->getContent(), true);
$request->request->replace(is_array($data) ? $data : array());
}
});
et dès que je commente ce dernier, tout fonctionne À nouveau.
Merci d'avance
Peux-tu citer le message d'erreur exact, s'il y en a un ?
afin d'avoir une erreur plus détaillé, j'ai desactivé l error handler, et voici ce qui en resulte:
Whoops, looks like something went wrong.
1/1
ContextErrorException in app.php line 96:
Catchable Fatal Error: Argument 1 passed to {closure}() must be an instance of Request, instance of Symfony\Component\HttpFoundation\Request given
in app.php line 96
at ErrorHandler->handleError('4096', 'Argument 1 passed to {closure}() must be an instance of Request, instance of Symfony\Component\HttpFoundation\Request given', 'C:\xampp\htdocs\microcms\app\app.php', '96', array()) in app.php line 96
at {closure}(object(Request), object(Application))
at call_user_func(object(Closure), object(Request), object(Application)) in Application.php line 316
at Application->Silex\{closure}(object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher))
at call_user_func(object(Closure), object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher)) in WrappedListener.php line 61
at WrappedListener->__invoke(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
at call_user_func(object(WrappedListener), object(GetResponseEvent), 'kernel.request', object(EventDispatcher)) in EventDispatcher.php line 164
at EventDispatcher->doDispatch(array(object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener)), 'kernel.request', object(GetResponseEvent)) in EventDispatcher.php line 53
at EventDispatcher->dispatch('kernel.request', object(GetResponseEvent)) in TraceableEventDispatcher.php line 112
at TraceableEventDispatcher->dispatch('kernel.request', object(GetResponseEvent)) in HttpKernel.php line 126
at HttpKernel->handleRaw(object(Request), '1') in HttpKernel.php line 66
at HttpKernel->handle(object(Request), '1', true) in Application.php line 543
at Application->handle(object(Request)) in Application.php line 520
at Application->run() in index.php line 14
Cette erreur indique que la classe Request n'est pas reconnue. Il manque probablement l'instruction ci-dessous dans app/app.php.
use Symfony\Component\HttpFoundation\Request;
cela a effectivement résolu le problème - merci. mais une chose m'echappe, pourquoi dois-je inclure cette instruction dans app/app.php ET dans app/routes.php ??
etant donné que les 2 fichiers sont inclus dans web/index.php
Dans l'itération 10, Gestion des articles, le "delete" ne fonctionne pas...
bpesquet a écrit:
Bonjour,
Quel est le message d'erreur obtenu ?
Avez-vous pensé à supprimer d'abord les commentaires associés (appel à deleteAllByArticle) avant de supprimer l'article ?
Bonjour,
Je n'ai pas de message d'erreur.
Relativement à la suppression préalable des commentaires associés, j'ai copié les codes du tuto.
Il est possible que mon problème tienne au fait que je n'ai pas créé d'hôte virtuel (sur mon hébergeur, je crois qu'il aurait fallu que je crée un sous-domaine). J'ajoute donc le chemin qui manque aux liens dans les codes (../MicroCMS/web/). Jusqu'à présent, cela fonctionnait, mais je ne l'ai peut-être pas fait partout comme il faut.
J'ai rencontré un problème à l'itération 11 concernant la journalisation et le débogage avec une erreur de timezone. Je partage simplement la solution si quelqu'un rencontre le même problème.
Le problème est que par défaut sur ma config MAC OS, avec apache natif donc sans MAMP le timezone n'est définit. La solution est donc de le définir dans le fichier php.ini. Il faut décommenter les deux dernières ligne de ce bloque puis après le "=" en ce qui me concerne mettre "Europe/Paris".
[Date]
; Defines the default timezone used by the date functions
;http://php.net/date.timezone
;date.timezone =
2) dans AuthorDAO j'ai une function findAuthor($id)
public function findAuthor($id) {
$sql = "select * from author where auth_id=?";
$row = $this->getDb()->fetchAssoc($sql, array($id));
return $this->buildDomainObject($row);
}
Elle fonctionne trés bien pour les 3 livres. par contre si je mets le if et else autour du return
if ($row)
return $this->buildDomainObject($row);
else
throw new \Exception("No author matching id " . $id);
j'aurais les details pour les deux premier livre mais quant je clique sur le troisieme (Le Dahlia noir) j ai droit au message d'erreur suivant:
J'ai rencontré un problème à l'itération 11 concernant la journalisation et le débogage avec une erreur de timezone. Je partage simplement la solution si quelqu'un rencontre le même problème.
Le problème est que par défaut sur ma config MAC OS, avec apache natif donc sans MAMP le timezone n'est définit. La solution est donc de le définir dans le fichier php.ini. Il faut décommenter les deux dernières ligne de ce bloque puis après le "=" en ce qui me concerne mettre "Europe/Paris".
[Date]
; Defines the default timezone used by the date functions
;http://php.net/date.timezone
;date.timezone =
Voila tout, bonne continuation à tous !
Bonjour,
Merci d'avoir partagé votre solution. Ce problème me rappelle quelque chose mais je ne suis pas arrivé à le reproduire chez moi. Pouvez-vous donner plus de détails sur l'erreur que vous obteniez ?
Cette erreur indique que la classe Request n'est pas reconnue. Il manque probablement l'instruction ci-dessous dans app/app.php.
use Symfony\Component\HttpFoundation\Request;
cela a effectivement résolu le problème - merci. mais une chose m'echappe, pourquoi dois-je inclure cette instruction dans app/app.php ET dans app/routes.php ??
etant donné que les 2 fichiers sont inclus dans web/index.php
Cette instruction use est indispensable dans les fichiers app.php et routes.php pour pouvoir, dans ces fichiers, utiliser la classe Request sans devoir la préfixer par "Symfony\Component\HttpFoundation\". Ils sont tous deux inclus dans web/index.php mais ne se "voient" pas l'un l'autre, donc il faut une instruction use dans chaque fichier.
Ces instructions servent à automatiser l'échappement des variables insérées dans les vues, pour éviter les attaques par injection de code. Il s'agit d'une erreur de ma part, Twig réalise l'échappement par défaut et ces instructions sont parfaitement inutiles.
Gilless57 a répondu à votre autre question. Etes-vous sûr de ne pas passer un $bookId au lieu d'un $authorId à la méthode findAuthor() ?
dans AuthorDAO - function findAuthor($id) il utilise bien la valeur auth_id que j'y est passé en paramètre pour chercher l'auteur mais apres il fait les test"if($row)" sur id du livre
Bon, je suis toujours bloqué...et je n'ai pas de solutions.
Voici la partie ajoutée dans mon routes.php
// Add a new link
$app->match('/link/submit', function(Request $request) use ($app) {
$link = new Link();
$linkForm = $app['form.factory']->create(new LinkType(), $link);
$linkForm->handleRequest($request);
if ($linkForm->isSubmitted() && $linkForm->isValid()) {
$app['dao.link']->save($article);
$app['session']->getFlashBag()->add('success', 'The link was successfully created.');
}
return $app['twig']->render('link.html.twig', array(
'title' => 'New article',
'articleForm' => $linkForm->createView()));
});
J'ai crée le fichier linktype.php avec ceci
namespace WebLinks\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class LinkType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text')
->add('URL', 'text');
}
public function getName()
{
return 'link';
}
}
Et là....ça bloque avec cette erreur
InvalidArgumentException in Pimple.php line 78:
Identifier "form.factory" is not defined.
in Pimple.php line 78
at Pimple->offsetGet('form.factory') in routes.php line 25
at {closure}(object(Request))
at call_user_func_array(object(Closure), array(object(Request))) in HttpKernel.php line 145
at HttpKernel->handleRaw(object(Request), '1') in HttpKernel.php line 66
at HttpKernel->handle(object(Request), '1', true) in Application.php line 543
at Application->handle(object(Request)) in Application.php line 520
at Application->run() in index.php line 11
J'ai rencontré un problème à l'itération 11 concernant la journalisation et le débogage avec une erreur de timezone. Je partage simplement la solution si quelqu'un rencontre le même problème.
Le problème est que par défaut sur ma config MAC OS, avec apache natif donc sans MAMP le timezone n'est définit. La solution est donc de le définir dans le fichier php.ini. Il faut décommenter les deux dernières ligne de ce bloque puis après le "=" en ce qui me concerne mettre "Europe/Paris".
[Date]
; Defines the default timezone used by the date functions
;http://php.net/date.timezone
;date.timezone =
Voila tout, bonne continuation à tous !
Bonjour,
Merci d'avoir partagé votre solution. Ce problème me rappelle quelque chose mais je ne suis pas arrivé à le reproduire chez moi. Pouvez-vous donner plus de détails sur l'erreur que vous obteniez ?
Voici l'erreur obtenue si le timezone n'est pas bien définit :
ContextErrorException in Logger.php line 248:Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
Donc si vous rencontrez cette erreur, il faut modifier le php.ini comme ceci (faire une recherche par mot "timezone"):
[Date]
; Defines the default timezone used by the date functions
http://php.net/date.timezone
date.timezone = Europe/Paris
j'obtiens un The requested URL /article/1 was not found on this server. Comment faire car s'il faut modifier .htaccess je ne sais pas comment faire, et mod_rewrite est bien activé
J'ai commencé le cours qui est très complet ! Cependant, j'aurais aimé savoir comment proposer plusieurs thèmes graphiques (un peu comme dans Wordpress) ?
Je ne peut rien faire face a cet exigence pour la dernière activité, je traîne 3 erreur et elle ressorte de mes formulaires pour les liens.
Tests fonctionnels automatisés des URL de consultation (6 URL à tester).
Tout fonctionne mais pas le teste phpunit.bat. Je traîne les erreur depuis l'intégration des test tel que vue dans le cours et la première erreur as été sur ma ligne 12 de mon formulaire twig que voila :
Je suis presque a boute je pense valider l'activité sans règlé le probleme ma s sa me coutera un ou 2 beau point =)
Bref j'ai terminé et voici le résultat du test :
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from C:\Server Files\wamp\www\openclassroom\WebLinks\phpunit.
xml.dist
..F.FF..
Time: 2.16 seconds, Memory: 31.00Mb
There were 3 failures:
1) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #2 ('/link/submit'
)
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
2) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #4 ('/admin/link/a
dd')
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
3) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #5 ('/admin/link/1
/edit')
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
FAILURES!
Tests: 8, Assertions: 8, Failures: 3.
Demain si j'ai pas de réponse et je n'ai pas trouvé!
J'envoie mon fichier tel quel. (Car tout fonctionne bien)
Et une seconde question. Dois-t'ont avoir terminer la correction de l'activité d'ici la fin du temps!
Je ne peut rien faire face a cet exigence pour la dernière activité, je traîne 3 erreur et elle ressorte de mes formulaires pour les liens.
Tests fonctionnels automatisés des URL de consultation (6 URL à tester).
Tout fonctionne mais pas le teste phpunit.bat. Je traîne les erreur depuis l'intégration des test tel que vue dans le cours et la première erreur as été sur ma ligne 12 de mon formulaire twig que voila :
Je suis presque a boute je pense valider l'activité sans règlé le probleme ma s sa me coutera un ou 2 beau point =)
Bref j'ai terminé et voici le résultat du test :
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from C:\Server Files\wamp\www\openclassroom\WebLinks\phpunit.
xml.dist
..F.FF..
Time: 2.16 seconds, Memory: 31.00Mb
There were 3 failures:
1) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #2 ('/link/submit'
)
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
2) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #4 ('/admin/link/a
dd')
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
3) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #5 ('/admin/link/1
/edit')
Failed asserting that false is true.
C:\Server Files\wamp\www\openclassroom\WebLinks\tests\Tests\AppTest.php:23
FAILURES!
Tests: 8, Assertions: 8, Failures: 3.
Demain si j'ai pas de réponse et je n'ai pas trouvé!
J'envoie mon fichier tel quel. (Car tout fonctionne bien)
Et une seconde question. Dois-t'ont avoir terminer la correction de l'activité d'ici la fin du temps!
Merci et bonne chance.
Bonjour wfblake724, j'ai le même problème que toi concernant la validation de phpunit...je cherche également mais je ne trouve pas...par contre pour ma part, je suis dans Admin/link/submit (je dois avoir le role Admin pour pouvoir rajouter une Url...)
c:\wamp\www\WebLinks>vendor\bin\phpunit.bat
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from C:\wamp\www\WebLinks\phpunit.xml.dist
...F..
Time: 1.09 seconds, Memory: 19.75Mb
There was 1 failure:
1) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #3 ('/admin/link/s
Je précise mes URL. Et de mon côté c'est une certitude que le problème roule dans le fichier Type (LinkType.php) et les Formulaire utilisant les fonctionnalité Symfony et affiché par Twig. Par contre le fichier (UserType.php) que j'ai copier et retaper lui ne cause aucune erreur...
public function provideUrls()
{
return array(
array('/'),
array('/login'),
//array('/link/submit'),
array('/admin'),
//array('/admin/link/add'),
//array('/admin/link/1/edit'),
array('/admin/user/add'),
array('/admin/user/1/edit'),
);
}
Je continue de chercher. Il doit y avoir une bonne explication. J'ai fait du Copy/Past et j'ai tout re-typer les codes, mais je doit avoir oublier quelque-chose ou je ne m'y connais pas assez.
Ce qui est drôle c'est que toutes les fonctionnalité sont en place (je le jure que tout fonctionne) et phpunit.bat me ressort des erreurs.
De mon côté j'ai compléter ce qui est optionnel. J'ai 8 Adresse a vérifier, et les 3 en commentaire me retourne des «Failure».
voila possiblement ton erreur... mais je suis vraiment pas certain vu que tu roule ton ajout de lien en administration...
Je ne suis jamais dans la faille très longtemps... de mon côté j'avais oublier une structure if que voila (pour mon fichier Twig linkSubmit.html.twig)...
{% if linkForm %}
Content
{% else %}
<a href="{{ path('login') }} ">Log in</a> to submit a link.
{% endif %}
Mais pour l'administration de lien sa reste a voir. l'inclusion de ce code dans mon fichier linkForm.html.twig n'as rien fait aux «Failure»
Il me reste 2 Failles. et que peut vouloir dire :
1) WebLinks\Tests\AppTest::testPageIsSuccessful with data set #4 ('/admin/link/add')
Failed asserting that false is true.
Je précise, dans le log! Cette erreur est mon record de longueur! Et elle est critique!
[2015-03-09 00:15:30] WebLinks.INFO: Populated SecurityContext with an anonymous Token [] []
[2015-03-09 00:15:30] WebLinks.INFO: > GET /admin/link/add [] []
[2015-03-09 00:15:30] WebLinks.CRITICAL: Symfony\Component\Debug\Exception\ContextErrorException: Catchable Fatal Error: Argument 1 passed to WebLinks\Domain\Link::setAuthor() must be an instance of WebLinks\Domain\User, string given, called in C:\Server Files\wamp\www\openclassroom\WebLinks\src\Controller\AdminController.php on line 33 and defined (uncaught exception) at C:\Server Files\wamp\www\openclassroom\WebLinks\src\Domain\Link.php line 65 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Catchable Fatal Error: Argument 1 passed to WebLinks\\Domain\\Link::setAuthor() must be an instance of WebLinks\\Domain\\User, string given, called in C:\\Server Files\\wamp\\www\\openclassroom\\WebLinks\\src\\Controller\\AdminController.php on line 33 and defined at C:\\Server Files\\wamp\\www\\openclassroom\\WebLinks\\src\\Domain\\Link.php:65)"} []
[2015-03-09 00:15:30] WebLinks.INFO: < 500 [] []
public function save($usrid, Link $link) {
$linkData=array(
'user_id' =>$usrid,
'link_title' =>$link->getTitle(),
'link_url' =>$link->getUrl()
);
//...
Ont est jamais mieux servis que par sois même...
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from C:\Server Files\wamp\www\openclassroom\WebLinks\phpunit.
xml.dist
........
Time: 2.28 seconds, Memory: 30.50Mb
OK (8 tests, 8 assertions)
En fait, j'ai du mal à comprendre la différence entre les 2 méthodes : le setAuthor($user) fonctionne effectivement correctement, ihm ok, insert en base ok et pourtant le phpunit me renvoie une failure sur l'url link/submit (je ne suis plus en admin, en fait je m'étais planté)
par contre, j'ai l'impression que nous n'accédons pas de la même manière au formulaire --> layout.html.twig pour ma part
<ul class="nav navbar-nav navbar-left">
{% if app.security.token and is_granted('IS_AUTHENTICATED_FULLY') %}
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.
Manu pour "Les Sens Du Web"