Jump to content

Error al cargar controlador


Eduard

Recommended Posts

Buenas,
Estoy desarrollando un módulo.

El módulo tiene un acceso desde backoffice en el menú. Cuando entra desde el menú, no da ningún aviso.

En la página que presenta hay distintos botones para insertar, listar etc. Cuando (recargo la página) pulso estos me da un error que no entiendo muy bien a que se refiere:

configuartion_ps1.7.thumb.png.836f3b8e4ba66fd7b8af8fef468d3a32.png

¿Qué no encuentra el objeto configuración? se refiere a esta parte del código...
 

$lang = new \Language((int)\Configuration::get('PS_LANG_DEFAULT'));


¿Cómo puedo activar la barra debug "Symfony", en mi módulo, para poder ver más info? En las partes nativas de Prestashop sale (tengo activado modo debug)

Gracias.

DATOS: Esto sucedes en Prestashop 1.7
 

 

Link to comment
Share on other sites

  • 2 months later...

Hola yined,

El error se produce al recargar el controlador.

 

<?php
/**
*  @author    Eduardo Pinuaga Linares - Did-web
*  @copyright Did-web 2019
*  @license   GNU General Public License version 2
*
*  @version   1.1

*
* Languages: ES, DE, EN
* PS version: 1.7
*
**/

require_once dirname(__FILE__) . '/../../vendor/didweb/paginator/classes/paginator.php';
//require_once __DIR__ . '/../../vendor/autoload.php';

use DidWeb\Sql\Repositories;

use didweb\ratioruntime\ratioruntime;
//use didweb\paginator\Paginator;
use DidWeb\Paginator\Classes\Paginator;

use DidWeb\Models\DwgRecorded;
use DidWeb\DwGrabados\Classes\DwgAlert;
use DidWeb\DwGrabados\Classes\DwgUploadCsvApply;

class DwgUploadCsvApplyController extends ModuleAdminController
{
  public $files;
  private $productsRecorded = array();


  public function __construct()
  {
      parent::__construct();

      $this->bootstrap = true;
      $this->module->hookBackOfficeHeader();
      $this->template = 'dwg_upload_csv_apply.tpl';

  }



    public function createTemplate($tpl_name)
    {

      $getPosition = \Tools::getValue('position');
      $datas = null;
      $finish = null;
      $position = ($getPosition === false)?'init':$getPosition;
      $alerts = new DwgAlert();

      $uploadProcess  = new DwgUploadCsvApply();


      switch($position) {
          case 'upload':
              $csvApplyFile = $_FILES['csv-apply'];
              $path = $csvApplyFile['name'];
              $ext  = pathinfo($path, PATHINFO_EXTENSION);

              if($ext != '.csv') {
                $resultSetSourceFile = $uploadProcess->setSourceFile($csvApplyFile);
                if($resultSetSourceFile) {
                  $alerts->setAlert(true, 'success', 'Archivo Guardado con éxito.');
                } else {
                  $alerts->setAlert(true, 'danger', 'ERROR al subir el archivo.');
                }

              } else {
                $alerts->setAlert(true, 'danger', 'ERROR La extensión ['.$ext.'] de archivo no permitida. Sólo está permitida: .csv');
              }

          break;


          case 'update':
            $finish = $uploadProcess->updateDatasInDB();
            if($finish) {
              $alerts->setAlert(true, 'success', 'Archivo actualizado con éxito.');
            } else {
              $alerts->setAlert(true, 'danger', 'El archivo no existe, debes subir antes un CSV con los datos.');
            }

          break;


          case 'purgelist':
          $delete = Repositories::deleteTable(DWE_APPLY_BY_REFERENCE);
          $alerts->setAlert(true, 'success', 'El listado ha sido eliminado.');
          break;


          case 'init':
          break;

      }


      $page =  \Tools::getValue('page');
      $allDatas = $uploadProcess->getAllApplyDatas();
      $urlBase = "index.php?controller=DwgUploadCsvApply"
                           ."&token=".Tools::getValue('token');
      $paginator_txt =array('Previous'=>'Anterior', 'Next'=>'Próximo');
      $paginator = Paginator::pagination($page, $allDatas, 10, $urlBase, 5, $paginator_txt);

      $fileExist = $uploadProcess->fileExist();
      $translations = '';
      $this->context->smarty->assign(array(
                              'alerts'    => $alerts->getAlert(),
                              'datas'     => $datas,
                              'finish'    => $finish,
                              'fileExist' => $fileExist,
                              'allDatas'  => $paginator['result'],
                              'paginator' => $paginator
                            ));

      return $this->context->smarty->createTemplate(
          _PS_MODULE_DIR_ . 'dwgrabados\views\templates\admin\/' . $tpl_name,
          $this->context->smarty
      );
    }

}


El proceso lo realiza correctamente. Solo que salta la alerta. El controlador se vuelve a llamar a si mismo por ejemplo para pasar pro el "update". Pero al pasar esta vez pareces ser que  no encuentra el "objeto configuration". 

Gracias.

 

alerta.png

Link to comment
Share on other sites

En la funciòn:

createTemplate

No estas colocando un case default o un alert al final verifica alli puede ser que no entre en al guno de los casos.

No estas realizando validaciones sobre la variable

$uploadProces

Y por lo tanto no sabes si viene vacia o viene con errores.

Tambien debes validar lo que estas pasando por el TPL y asi asegurarte que todo vaya bien.

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...

Finalmente descubrí que es lo que sucedía.

El error se produce cuando la url contiene algun parametro aparte del nombre de controlador y el token.

Por ejemplo esta forma de enviar el formulario produce el error ...

INCORRECTO -->>

<form
   action="{$smarty.const.E_PRODUCTSBYTAGS_DIR_BASE_ADMIN}index.php?controller={$smarty.const.E_PRODUCTSBYTAGS_NAME_CONTROLER}&token={Tools::getAdminTokenLite({$smarty.const.E_PRODUCTSBYTAGS_NAME_CONTROLER})}&option=update"
   method="POST" class="defaultForm form-horizontal" id="fieldset_form">

Porque contiene este parámetro pasado por GET -> &option=update

 

CORRECTO -->>

  <form
   action="{$smarty.const.E_PRODUCTSBYTAGS_DIR_BASE_ADMIN}index.php?controller={$smarty.const.E_PRODUCTSBYTAGS_NAME_CONTROLER}&token={Tools::getAdminTokenLite({$smarty.const.E_PRODUCTSBYTAGS_NAME_CONTROLER})}"
   method="POST" class="defaultForm form-horizontal" id="fieldset_form">

SOLUCIÓN: Quitó el parámetro pasado por GET y lo mandó como hidden por POST

Gracias por la ayuda.
Saludos
 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...