Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2][Symfony2] Command - przekazywanie danych strony do metody execute, Jak przekazywać dane ze strony www do metody klasy Command
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Mam klasę Command, którą będzie uruchamiał CRON na serwerze produkcyjnym.
W klasie Command mam metodę execute w której mam odpowiednie zadania do zrealizowania.
Jak przekazać do metody execute parametry z mojej aplikacji WWW ?
Wiem że metoda execute przyjmuje dwa parametry input i output - rozumiem że to z nich trzeba skorzystać tylko nie wiem za bardzo jak.

Przykładowo w aplikacji na głównej stronie mam wyświetlaną datę i jakieś ID/Numer - wartości obu parametrów będą się zmieniać.
I teraz chciałbym te parametry przekazać do metody klasy Command , która wykonuje zadania za pomocą CRONa.

Jak pobrać te dane (data,numer) ze strony i przekazać je jako parametry do metody execute klasy Command ?
A może nie tak to się robi ?

Ten post edytował damianooo 18.11.2017, 12:53:35
Go to the top of the page
+Quote Post
mcmaroon
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 5
Dołączył: 30.11.2016

Ostrzeżenie: (0%)
-----


Twoja klasa zamiast
  1. use Symfony\Component\Console\Command\Command;

może też dziedziczyć np
  1. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

czyli
  1. class JakasNazwaCommand extends ContainerAwareCommand

i w tym momencie możesz w execute dać np taki zestaw który umożliwi Tobie pobranie danych z bazy lub konfiguracji yml
  1. $this->container = $this->getContainer();
  2. $this->doctrine = $this->container->get('doctrine');
  3. $this->em = $this->doctrine->getManager();
  4. $this->em->getConnection()->getConfiguration()->setSQLLogger(null);

przykładowo
  1. $this->container->getParameter('database_name');


Możesz też w metodzie configure użyć addArgument lub addOption i posyłać parametry bezpośrednio przez zadanie cron ale to raczej nie wchodzi w grę.

Ten post edytował mcmaroon 18.11.2017, 23:40:58
Go to the top of the page
+Quote Post
damianooo
post
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


ok .. widzę że moja klasa dziedziczy po ContainerAwareCommand:

  1. class CronCommand extends ContainerAwareCommand{


W projekcie mam tak że w bazowym pliku szablonu TWIG base.html.twig mam wywoływaną funkcję z szablonu Twig Extension, która wyciąga mi obecny numer kolejki (kolejka piłkarska).

AppExtension.php

  1. class AppExtension extends \Twig_Extension{
  2. ...
  3. public function getFunctions()
  4. {
  5. return array(
  6. new \Twig_SimpleFunction('curr_matchday', array($this, 'getCurrentMatchday')),
  7. ....
  8. }
  9.  
  10. // get current matchday
  11. public function getCurrentMatchday(){
  12. $repository = $this->doctrine->getRepository('AppBundle:Matchday');
  13. $matchday = $repository->getMatchday();
  14.  
  15. return $matchday;
  16. }


base.html.twig

  1. <div id="info_02">
  2. {% block info %}
  3. ...
  4. Kolejka {{ curr_matchday().name }}/15
  5. ...
  6. {% endblock %}
  7. </div>


Może jeszcze wrzucę jak wygląda metoda wywoływanej w TwigExtension metody klasy Repository:

  1. class MatchdayRepository extends EntityRepository
  2. {
  3. // pobranie obecnej kolejki
  4. public function getMatchday(){
  5. $today = new \DateTime('now');
  6. $qb = $this->createQueryBuilder('m');
  7. $qb->select('m.id AS id'
  8. ,'m.name AS name'
  9. ,'m.dateFrom AS dateFrom'
  10. ,'m.dateTo AS dateTo'
  11. ,'s.id AS season_id'
  12. )
  13. ->innerJoin('m.season', 's')
  14. ->where('m.dateFrom > :today')
  15. ->setMaxResults(1)
  16. ->setParameter('today', $today->format('Y-m-d H:i:s'))
  17. ;
  18.  
  19. $result = $qb->getQuery()->getOneOrNullResult();
  20.  
  21. return $result;
  22. }
  23.  
  24. }



I jak teraz przekazać z szablonu bazowego TWIG tą wartość curr_matchday().name jako parametr do mojej metody execute w klasie Command ?

Ten post edytował damianooo 19.11.2017, 20:39:00
Go to the top of the page
+Quote Post
mcmaroon
post
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 5
Dołączył: 30.11.2016

Ostrzeżenie: (0%)
-----


Pobrać tak samo jak w twig extension
czyli np to co pisałem poprzednio
  1. $this->container = $this->getContainer();
  2. $this->doctrine = $this->container->get('doctrine');
  3. $this->em = $this->doctrine->getManager();
  4. $this->em->getConnection()->getConfiguration()->setSQLLogger(null);

+ w execute
  1. $repository = $this->em->getRepository('AppBundle:Matchday');
  2. $matchday = $repository->getMatchday();
  3. if(matchday){
  4. // tu jakis kod
  5. }
Go to the top of the page
+Quote Post
damianooo
post
Post #5





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


ok dzięki no fakt działa!
Zrobiłem tak:

  1. class CronCommand extends ContainerAwareCommand{
  2.  
  3. ...
  4.  
  5. protected function execute(InputInterface $input, OutputInterface $output)
  6. {
  7. $doctrine = $this->getContainer()->get('doctrine');
  8. $em = $doctrine->getEntityManager();
  9.  
  10. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  11. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  12. ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:25