THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


Bonjour,

Je rencontre un petit (gros) soucis sur une de mes commandes. J'ai besoin de récuperer le contenu d'une de mes routes (génération de CSV à partir d'une loop), mais le soucis est que absoluteUrl me renvoie (localhost/...) alors que la même méthode ailleurs me renvoie bien le fake dns que j'ai mis en place. Je suppose que c'est lié au fait que je sois dans une commande, mais comment contourner ce problème?

class LogbookCSV extends ContainerAwareCommand
{
    protected function init()
    {
        $container = $this->getContainer();

        $request = new Request();
        $request->setSession(new Session(new MockArraySessionStorage()));

        /** @var RequestStack $requestStack */
        $requestStack = $container->get('request_stack');
        $requestStack->push($request);
    }

    protected function configure()
    {
        $this
            ->setName("subscription:logbook")
            ->setDescription("Generate CSV file with all the bank transfers of the past month then email it");
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("Starting");
        $output->writeln("Processing Bank Transfer during last month");
        $today = date('m-d-Y');
        $filename = Subscription::LOGBOOK_DIR."logbook-".$today;
        $this->init();
        $url = new URL($this->getContainer());
        echo $url->absoluteUrl('/logbook/csv');
        $csv = file_get_contents($url->absoluteUrl('/logbook/csv'));
        file_put_contents($filename, $csv);
        $output->writeln("Done !");
    }
}

Pourriez-vous m'aider SVP?

Last edited by wisejack (21-04-2017 21:56:39)

Offline


Franchement, un simple wget -q -O toto.csv http://ton_url suffirait pour simplement récupérer les données CSV. Pourquoi écrire une commande Thelia ?


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Parce qu'on voudrait automatiser ce process, de manière a générer le fichier automatiquement grâce à un CRON puis à envoyer le lien lui correspondant par mail à différents gestionnaires. Sans avoir à intervenir manuellement

Offline


En laissant tomber le problème d'url, et la commande, quand je fais un wget sur mon url j'obtiens systematiquement un 403 Forbidden.La même url dans mon navigateur, perfect j'ai ce qu'il me faut, dans mon terminal avec un wget Forbidden.
Mon controller:

class LogbookController extends BaseAdminController
{
    /**
     * @param $period_start
     * @param $period_end
     * @return Response
     */
    public function renderLogbookContentAction($period_start, $period_end)
    {
        $data = $this->renderRaw('logbook_content', [
            "period_start" => $period_start,
            "period_end" => $period_end
        ]);

        return new Response(json_encode(["html" => $data]), 200);
    }

    public function renderLogbookCSVAction()
    {
        $end = date('Y-m-d');
        $start = date("Y-m-d", strtotime('-1 month', strtotime($end)));

        $csv = $this->renderRaw('csv_logbook_content', [
            "period_start" => $start,
            "period_end" => $end
        ]);

        return new Response($csv);
    }

Que puis-je faire?

Offline


Forbidden, ça veut dire que tu n'as sans doute pas ajouté ton adresse locale dans index_dev.php, ou alors que tu as un problème dans ta config réseau...


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


J'ai effectué la requête avec index.php et le index_dev.php, même résultat. J'ai désactivé le filtrage IP dans l'index_dev.php, idem, même résultat.
Je craque

Offline

Offline


$> wget http://local.eshop.com/index.php/logbook/csv
--2017-04-21 17:30:16--  http://local.eshop.com/index.php/logbook/csv
Resolving local.eshop.com (local.eshop.com)... 127.0.0.1
Connecting to local.eshop.com (local.eshop.com)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2017-04-21 17:30:16 ERROR 403: Forbidden.

Offline

Offline


Non du tout, j'ai récupéré un zip Thelia classique sur github. Dans mes logs j'ai ça

127.0.0.1 - - [21/Apr/2017:17:37:58 +0200] "GET /index.php/logbook/csv HTTP/1.1" 200 458 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"
127.0.0.1 - - [21/Apr/2017:17:37:58 +0200] "GET /favicon.ico HTTP/1.1" 200 1450 "http://local.eshop.com/index.php/logbook/csv" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"



127.0.0.1 - - [21/Apr/2017:17:38:19 +0200] "GET /index.php/logbook/csv HTTP/1.1" 403 4029 "-" "Wget/1.17.1 (linux-gnu)"

Offline


Vérifie la définition de tes routes... (get ? post ? les deux ?)


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Les deux je dirais, je n'ai rien précisé:

 <route id="subscription.logbook.csv" path="/logbook/csv">
        <default key="_controller">Subscription\Controller\LogbookController::renderLogbookCSVAction</default>
    </route>

Offline

Offline


wget http://local.eshop.com/logbook/csv
--2017-04-21 18:42:18--  http://local.eshop.com/logbook/csv
Resolving local.eshop.com (local.eshop.com)... 127.0.0.1
Connecting to local.eshop.com (local.eshop.com)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-04-21 18:42:18 ERROR 404: Not Found.

Ma conf apache

<virtualhost *:80>

	ServerName local.eshop.com
	DocumentRoot "/var/www/eshop/web"

	<Directory "/var/www/eshop/web">
	    	AllowOverride All
        
        	# on apache 2.2 use :
        	#Order allow,deny
        	Allow from all
        	Options -Indexes +FollowSymLinks +SymLinksifOwnerMatch
        	# on apache 2.4 use :
		Require all granted
	</Directory>

	# Custom log file
    Loglevel warn
    ErrorLog /var/log/apache2/eshop.error.log
    CustomLog /var/log/apache2/eshop.log combined

</virtualHost>

Offline


Ha mais oui, ton contrôleur est un contrôleur admin (il étend BaseAdminController), du coup tu dois être connecté au BO pour y accéder.

Fais en un contrôleur front, qui étend BaseFrontController, et ça va rouler !


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Bien vu, merci infiniment