Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2][Symfony2] Symfony/CRON/SMS na hostingu
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
W metodzie execute klasy Command użyłem skryptu PHP z API wybranej bramki sms:

Poniżej kod mojej klasy CronCommand:

  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10.  
  11. class CronCommand extends ContainerAwareCommand{
  12.  
  13. protected function configure()
  14. {
  15. $this->setName('app:przypominajka')
  16. ->setDescription('Przypomnienie');
  17. }
  18.  
  19. protected function execute(InputInterface $input, OutputInterface $output)
  20. {
  21. $doctrine = $this->getContainer()->get('doctrine');
  22. $em = $doctrine->getEntityManager();
  23.  
  24. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  25.  
  26. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  27.  
  28. ini_set("soap.wsdl_cache_enabled", "0");
  29. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  30. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  31. $arMessages = array(array(
  32. "recipients" => $usersPhones,
  33. "message" => "Przypomnienie",
  34. "sender"=> "Damian",
  35. "msgType" => 1,
  36. "unicode" => false,
  37. "sandbox" => false
  38. ));
  39.  
  40. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  41. }
  42. }



Na serwerze hostingowym w katalogu projektu Symfony wykonałem następującego CRONa (aby zweryfikować poprawność) :

  1. /usr/local/bin/php70 /home/dcpl/domains/dc84.pl/app/console app:przypominajka


Po wykonaniu otrzymałem następujący błąd:

  1. [dcpl@s25 dc84.pl]$ /usr/local/bin/php70 /home/dcpl/domains/dc84.pl/app/console app:przypominajka
  2. [Symfony\Component\Debug\Exception\ClassNotFoundException]
  3. Attempted to load class "SoapClient" from namespace "AppBundle\Command".
  4. Did you forget a "use" statement for another namespace?
  5. app:przypominajka [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-s|--shell] [--process-isolation] [-e|--env ENV] [--no-debug] [--] <command>



Wie ktoś może jaką klasę tutaj powinienem zaimportować aby to zadziałało ?

PS. Dodam tylko że support hostingu potwierdził mi że Soap jest zainstalowany na moim koncie:
"SOAP jest uruchomiony na Pana koncie cały czas."
To by się zgadzało bo zwykły testowy plik PHP z powyższym skryptem wysyłającym smsa działa.
ohm
No bo nie masz w AppBundle\Command SoapClient, musisz go wrzucić przez
  1. \SoapClient



damianooo
tak ale właśnie jaki namespace mam tam wpisać ?
Jaką ścieżkę dokładnie , jest to w Vendorach a więc będzie Symfony/...coś tam / SoapClient ?

Nie wiem jak to sprawdzić. W necie też nic nie pisze chyba że źle szukam "Symfony SoapClient namespace" ?
ohm
SoapClient jest klasą systemową (czy jak to tam się zwie) i nie ma jako takiego namespace'a

http://symfony2-docs-pl.readthedocs.io/pl/..._extension.html
damianooo
Czy li backslash (\) powinien załatwić sprawę .

Tzn zmiast tak:

  1. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");


ma być tak:

  1. $client = new \SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");



PS. Sprawdzę w domu smile.gif
viking
Albo use SoapClient na początku.
damianooo
ehh ani tak ani tak.
Ciągle mam w konsoli ten sam błąd:
Poniżej lokalne wywołanie komendy:

  1. damianoo@CampNou:/var/www/liga_typerow$ php app/console app:przypominajka
  2.  
  3. [Symfony\Component\Debug\Exception\ClassNotFoundException]
  4. Attempted to load class "SoapClient" from the global namespace.
  5. Did you forget a "use" statement?


Mam tak:

  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10. use SoapClient;
  11.  
  12. class CronCommand extends ContainerAwareCommand{
  13.  
  14. protected function configure()
  15. {
  16. $this->setName('app:przypominajka')
  17. ->setDescription('Przypomnienie o typowaniu');
  18. }
  19.  
  20. protected function execute(InputInterface $input, OutputInterface $output)
  21. {
  22. $doctrine = $this->getContainer()->get('doctrine');
  23. $em = $doctrine->getEntityManager();
  24.  
  25. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  26.  
  27. // pobranie listy numerów tel. użytkowników, którzy jeszcze nie wytypowali
  28. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  29.  
  30. ini_set("soap.wsdl_cache_enabled", "0");
  31. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  32. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  33. $arMessages = array(array(
  34. "recipients" => $usersPhones,
  35. "message" => "FC Barcelona rządzi :) ",
  36. "sender"=> "Damian",
  37. "msgType" => 1,
  38. "unicode" => false,
  39. "sandbox" => false
  40. ));
  41.  
  42. // wysłanie smsów o ustalonym w CRON terminie
  43. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  44.  
  45. }
  46. }


albo tak:


  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10.  
  11. class CronCommand extends ContainerAwareCommand{
  12.  
  13. protected function configure()
  14. {
  15. $this->setName('app:przypominajka')
  16. ->setDescription('Przypomnienie o typowaniu');
  17. }
  18.  
  19. protected function execute(InputInterface $input, OutputInterface $output)
  20. {
  21. $doctrine = $this->getContainer()->get('doctrine');
  22. $em = $doctrine->getEntityManager();
  23.  
  24. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  25.  
  26. // pobranie listy numerów tel. użytkowników, którzy jeszcze nie wytypowali
  27. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  28.  
  29. ini_set("soap.wsdl_cache_enabled", "0");
  30. $client = new \SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  31. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  32. $arMessages = array(array(
  33. "recipients" => $usersPhones,
  34. "message" => "FC Barcelona rządzi :) ",
  35. "sender"=> "Damian",
  36. "msgType" => 1,
  37. "unicode" => false,
  38. "sandbox" => false
  39. ));
  40.  
  41. // wysłanie smsów o ustalonym w CRON terminie
  42. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  43.  
  44. }
  45. }
  46.  
  47.  



Mówicie że to klasa systemowa i nie ma namespace ... hmm coś chyba musi jednak być ... można to jakoś zddebuggować żeby zweryfikować jak z Symfony powinienem się do tego dobrać ?

PS. Wyczyściłem dokładnie cache aplikacji.
ohm
sprawdz przez php -m czy na pewno masz ten modul dla cli zaladowany
damianooo
ok sprawdziłem na serwerze hostingowym i zadziałało.
U mnie lokalnie nie miałem Soapa włączonego i dlatego był problem.

Dzięki za pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.