Foros del Web » Programando para Internet » PHP » CodeIgniter »

Problema con URL de Controlador

Estas en el tema de Problema con URL de Controlador en el foro de CodeIgniter en Foros del Web. Hola a todos, espero que me ayuden por favor con el problema de codeigniter.. v2.2.1 Tengo mi controlador que es Facturar Código PHP: <?php  if ( !  ...
  #1 (permalink)  
Antiguo 30/08/2015, 14:03
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Problema con URL de Controlador

Hola a todos, espero que me ayuden por favor con el problema de codeigniter.. v2.2.1

Tengo mi controlador que es Facturar
Código PHP:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class 
Facturar extends CI_Controller {
    public function 
__construct(){
        
parent::__construct();
        
$this->load->model('Facturar_model');
    }

    
//Pagina Muestra Facturas Realizadas
    
public function index(){

        if (!
$this->session->userdata('login')):
            
$this->session->set_flashdata('mensaje','Debes Iniciar Sesion');
            
redirect(base_url());
        else:
            
// agregar breadcrumbs
            
$this->breadcrumbs->push('Dashboard''/');
            
$this->breadcrumbs->push('Documentos''/documentos');
            
$datos['bread']=$this->breadcrumbs->show();// salida


            
$segmentos_totales=$this->uri->total_segments();

            
$datos['segmentos']=$segmentos_totales;
            
$datos['titulo'] = "Documentos Creados";
            
$datos['documentos'] = $this->Facturar_model->listar_documentos();
            
$this->load->view('templates/header'$datos);
            
$this->load->view('factura/documentos');
            
$this->load->view('templates/footer');
        endif;
    }

    
// Pagina de Facturación
    
public function crear(){
        if (!
$this->session->userdata('login')):
            
$this->session->set_flashdata('mensaje','Debes Iniciar Sesion');
            
redirect(base_url());
        else:
            
// agregar breadcrumbs
            
$this->breadcrumbs->push('Dashboard''/');
            
$this->breadcrumbs->push('Documentos''/documentos');
            
$this->breadcrumbs->push('Agregar Factura''/facturar');
            
$datos['bread']=$this->breadcrumbs->show();// salida


            
$segmentos_totales=$this->uri->total_segments();

            
$datos['segmentos']=$segmentos_totales;
            
$datos['titulo']= "Crear Documento";
            
$this->load->view('templates/header',$datos);
            
$this->load->view('factura/crear_factura');
            
$this->load->view('templates/footer');
        endif;
    }

    
//anular facturas con ajax
    
public function anular_doc(){
        
$id=$this->input->post('id');
        
$estado=$this->input->post('estado');
        
$this->Facturar_model->actualizar_factura($id,$estado);
    }

    
//comprobador de correlativo
    
public function comprobar_correlativo(){
        
//recibimos los valores de serie y correltivo
        
$serie=$this->security->xss_clean(strip_tags($this->input->post('serie')));
        
$correlativo=$this->security->xss_clean(strip_tags($this->input->post('correlativo')));

        
$valor=$serie.$correlativo;
        
//comprobamos que no se haya registrado otra factura con el mismo numero de correlativo
        
$this->Facturar_model->consultar_factura($valor);
    }

    
//Pagina invisible, guardara los datos que se envio del formulario
    
public function guardar_datos_factura(){

        
// Campos para tabla de Facturacion
        // Recibe el Valor de los Campos por post, asignadas a una varibale
        
$tipodoc=$this->security->xss_clean(strip_tags($this->input->post('tipodoc')));
        
$serie=$this->security->xss_clean(strip_tags($this->input->post('serie')));
        
$correlativo=$this->security->xss_clean(strip_tags($this->input->post('correlativo')));
        
$fecha=$this->security->xss_clean(strip_tags($this->input->post('fecha')));
        
$moneda=$this->security->xss_clean(strip_tags($this->input->post('moneda')));
        
$idcliente=$this->security->xss_clean(strip_tags($this->input->post('idcliente')));
        
$cliente=$this->security->xss_clean(strip_tags($this->input->post('cliente')));
        
$precio_total=$this->security->xss_clean(strip_tags($this->input->post('total')));
        
$direccion=$this->security->xss_clean(strip_tags($this->input->post('direccion')));
        
$ruc=$this->security->xss_clean(strip_tags($this->input->post('ruc')));
        
$igv=$this->security->xss_clean(strip_tags($this->input->post('igv')));


        
//Campos para tabla producto
        
$array=$this->security->xss_clean($this->input->post('group-a'));
        
// $cantidad=$this->security->xss_clean(strip_tags($this->input->post('cantidad')));
        // $precio=$this->security->xss_clean(strip_tags($this->input->post('precio')));


        //Codigo unico de Documentos
        
$codigounico=$serie.$correlativo;

        
//Comprobamos que los campos necesarios para Factura esten llenos
        
if( isset($tipodoc) && !empty($tipodoc) && isset($idcliente) && !empty($idcliente) && isset($cliente) && !empty($cliente) && isset($fecha) && !empty($fecha) && isset($moneda) && !empty($moneda
            && isset(
$serie) && !empty($serie) && isset($correlativo) && !empty($correlativo) && isset($precio_total) && !empty($precio_total) && isset($igv) ):

            
//comprobamos que no se haya registrado otra factura con el mismo numero de correlativo
            
$consulta_serie $this->Facturar_model->consultar_factura($correlativo);

            
//Si no hay el correlativo en la base de datos, la registrará
            
if ($consulta_serie) :
                echo 
"<h2>Ya se ha registrado este numero de correlativo :(</h2>";
            else:
                
$this->Facturar_model->grabar_factura($codigounico$idcliente$cliente$tipodoc$fecha$moneda$serie$correlativo$precio_total$igv);
                echo 
"Listo, la factura se guardo<br>";
                
$this->Facturar_model->grabar_producto($codigounico,$array);
                echo 
"Se guardo el Producto";
            endif;

        else:
            echo 
"<h2>No Has mandado Datos<br>";
            echo 
$tipodoc;
        echo 
$serie;
        echo 
$correlativo;
        echo 
$fecha;
        echo 
$moneda;
        echo 
$idcliente;
        echo 
$cliente."<br> precio";
        echo 
$precio_total;
        echo 
$direccion."<br/>";
        echo 
$ruc."<br/>";
        echo 
$igv;
        endif;
    }
}
El problema es que al ingresar por URL

en mi caso: mi_ip/CodeIgniter/facturar
me muestra el método index
pero al ingresar a: mi_ip/CodeIgniter/facturar/facturar
Por que me devuelve el método index?? no me deveria devolver un 404??

Que hago mal?

este mi config

Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');


$config['base_url']    = 'http://192.168.1.33/CodeIgniter/';


$config['index_page'] = '';


$config['uri_protocol']    = 'AUTO';



$config['url_suffix'] = '';

$config['language']    = 'english';


$config['charset'] = 'UTF-8';


$config['enable_hooks'] = FALSE;



$config['subclass_prefix'] = 'MY_';



$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';



$config['allow_get_array']        = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger']    = 'c';
$config['function_trigger']        = 'm';
$config['directory_trigger']    = 'd'// experimental not currently in use


$config['log_threshold'] = 0;


$config['log_path'] = '';


$config['log_date_format'] = 'Y-m-d H:i:s';


$config['cache_path'] = '';


$config['encryption_key'] = 'I74IhPH1XoIothuQcbVNysx69ig4bH00';


$config['sess_cookie_name']        = 'ci_session';
$config['sess_expiration']        = 7200;
$config['sess_expire_on_close']    = FALSE;
$config['sess_encrypt_cookie']    = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']        = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent']    = TRUE;
$config['sess_time_to_update']    = 300;


$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']        = "/";
$config['cookie_secure']    = FALSE;


$config['global_xss_filtering'] = FALSE;


$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;


$config['compress_output'] = FALSE;


$config['time_reference'] = 'local';



$config['rewrite_short_tags'] = FALSE;



$config['proxy_ips'] = '';
  #2 (permalink)  
Antiguo 31/08/2015, 18:49
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

que version de PHP estas usando en tu localhost ?
  #3 (permalink)  
Antiguo 01/09/2015, 11:37
Avatar de bymorr  
Fecha de Ingreso: septiembre-2012
Mensajes: 118
Antigüedad: 11 años, 6 meses
Puntos: 9
Respuesta: Problema con URL de Controlador

Es por que utilizas un mismo nombre de la clase.
Ahora si designas el controlador de error en "routes" linea 42 te manejara cualquier nombre de método que no exista.
  #4 (permalink)  
Antiguo 01/09/2015, 12:57
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

En un principio pensé que ese era el problema.. así que busque para saber si el controlador o la clase se repetía, pero no.. no se repite.. nunca he tenido la necesidad de usar el route.. por qe solo me pasa con ese controlador .. ya intente cambiarle el nombre, pero aún así. .
  #5 (permalink)  
Antiguo 01/09/2015, 18:55
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

Creo que nada anda mal, no deberia mostrarte 404, ya que lo unico que estas haciendo es pasar la cadena "facturar" como parametro.
__________________
la la la
  #6 (permalink)  
Antiguo 02/09/2015, 07:43
Avatar de bymorr  
Fecha de Ingreso: septiembre-2012
Mensajes: 118
Antigüedad: 11 años, 6 meses
Puntos: 9
Respuesta: Problema con URL de Controlador

Cita:
Iniciado por truman_truman Ver Mensaje
Creo que nada anda mal, no deberia mostrarte 404, ya que lo unico que estas haciendo es pasar la cadena "facturar" como parametro.
se supone que esta entrando al controlador facturar/facturar (que seria la función).
Si agrega cualquier nombre que no sea el mismo de la clase da el error (siempre y cuando no este definida una función con ese nombre.


Saludos.
  #7 (permalink)  
Antiguo 06/09/2015, 11:35
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

Lamento la demora en responder..

Claro. obviamente mi controlador es facturar, pero yo no tengo ninguna función facturar,
me debería devolver un 404 ya qe no existe.

igual si ingreso a http://MI_IP/CodeIgniter/facturar/facturar/crear igual ingresa a la función index cuando no debería ingresar a nada, solo tengo este problema con el controlador facturar. Con los demás si hago lo mismo si me da el error que no existe.
  #8 (permalink)  
Antiguo 07/09/2015, 07:25
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

Fijate en el archivo application/config/routes.php, si está seteada esa ruta, puede que haya algo asi:

Código PHP:
Ver original
  1. $route['facturar/(:any)'] = "facturar/index/$1";
__________________
la la la
  #9 (permalink)  
Antiguo 07/09/2015, 13:11
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

El route lo tengo así. .
Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|    example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|    http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
|    $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|    $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/
$route['default_controller'] = "home";
$route['404_override'] = '';
/* End of file routes.php */
/* Location: ./application/config/routes.php */
  #10 (permalink)  
Antiguo 07/09/2015, 13:25
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

podrías imprimir esto para ver que versión de php estas usando?

<?php phpinfo()?>
__________________
la la la
  #11 (permalink)  
Antiguo 07/09/2015, 18:55
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

Aquí esta la captura

https://www.dropbox.com/s/j7s50f23w5...pinfo.PNG?dl=0
  #12 (permalink)  
Antiguo 08/09/2015, 13:04
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

Podrias mopstrar el contenido de: Facturar_model?
y tambien el contenido de config/autoload.php
__________________
la la la
  #13 (permalink)  
Antiguo 08/09/2015, 19:27
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

Facturar Model
Código PHP:
<?php
class Facturar_model extends CI_Model{
    public function 
__construct(){
        
parent::__construct();
    }

    public function 
listar_documentos(){

        
$this->db->order_by("id""desc"); 
        
$consulta $this->db->get('facturacion');
        return 
$consulta->result();

    }

    
//Consulta los datos de la tabla de facturacion en la Base de Datos
    
public function consultar_factura($valor){
        
$this->db->select('id_factura');
        
$this->db->where('id_factura'$valor);
        
$query$this->db->get('facturacion');

        
//si no hay datos de serie en la Base de datos devolvera "nodata"
        
if ($query->num_rows() > 0):
            echo 
"true";
        else:
            echo 
"false";
        endif;

    }

    public function 
actualizar_factura($id,$estado){
        
$data = array(
                       
'estado' => $estado
                    
);

        
$this->db->where('id'$id);
        
$this->db->update('facturacion'$data); 
    }

    public function 
obtener_datos($id){
        
$this->db->where('id'$id);
        
$consulta $this->db->get('facturacion');

        if (
$consulta->num_rows() > 0):
            return 
$consulta->row();
        else:
            return 
false;
        endif;

    }

    
//Graba los datos de faturacion en la Base de Datos
    
public function grabar_factura($codigounico$idcliente$cliente$tipodoc$fecha$moneda$serie$correlativo$precio_total$igv){
        
$datos = array(
            
'id_factura'    => $codigounico,
            
'id_cliente'    => $idcliente,
            
'razon_social'     => $cliente,
            
'tipo_documento'=> $tipodoc,
            
'serie'            => $serie,
            
'correlativo'     => $correlativo,
            
'fecha'            => $fecha,
            
'moneda'        => $moneda,
            
'monto'            => $precio_total,
            
'estado'        => "1",
            
'igv'            => $igv
             
);

        
$this->db->insert('facturacion',$datos);

    }

    public function 
grabar_producto($codigounico,$array){

        
$datos = array(); //abre el array

        
for($i=0$i<count($array); $i++){
            
$datos[] = array(
                
'id_factura'    => $codigounico,
                
'producto'        => $array[$i]['producto'],
                
'cantidad'        => $array[$i]['cantidad'],
                
'precio_unit'    => $array[$i]['precio_unit'],
                
'precio'        => $array[$i]['precio']
            );
        }

        
$this->db->insert_batch('items',$datos);

    }
}
?>
Autoload
Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it.  This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Packages
| 2. Libraries
| 3. Helper files
| 4. Custom config files
| 5. Language files
| 6. Models
|
*/

/*
| -------------------------------------------------------------------
|  Auto-load Packges
| -------------------------------------------------------------------
| Prototype:
|
|  $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/

$autoload['packages'] = array();


/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
|    $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/

$autoload['libraries'] = array('database','session','breadcrumbs');


/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|    $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('url');


/*
| -------------------------------------------------------------------
|  Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
|    $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files.  Otherwise, leave it blank.
|
*/

$autoload['config'] = array();


/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
|    $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file.  For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/

$autoload['language'] = array();


/*
| -------------------------------------------------------------------
|  Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
|    $autoload['model'] = array('model1', 'model2');
|
*/

$autoload['model'] = array();


/* End of file autoload.php */
/* Location: ./application/config/autoload.php */
  #14 (permalink)  
Antiguo 08/09/2015, 19:35
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

Ok, ahora el contenido de la library breadcrumbs
__________________
la la la
  #15 (permalink)  
Antiguo 08/09/2015, 20:41
 
Fecha de Ingreso: enero-2011
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema con URL de Controlador

Breadcrumbs
Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Breadcrumbs Class
 *
 * This class manages the breadcrumb object
 *
 * @package        Breadcrumb
 * @version        1.0
 * @author         Buti <[email protected]>
 * @copyright     Copyright (c) 2012, Buti
 * @link        https://github.com/nobuti/codeigniter-breadcrumb
 */
class Breadcrumbs {
    
    
/**
     * Breadcrumbs stack
     *
     */
    
private $breadcrumbs = array();
         
     
/**
      * Constructor
      *
      * @access    public
      *
      */
    
public function __construct()
    {    
        
$this->ci =& get_instance();
        
// Load config file
        
$this->ci->load->config('breadcrumbs');
        
// Get breadcrumbs display options
        
$this->tag_open $this->ci->config->item('tag_open');
        
$this->tag_close $this->ci->config->item('tag_close');
        
//$this->divider = $this->ci->config->item('divider');
        
$this->crumb_open $this->ci->config->item('crumb_open');
        
$this->crumb_close $this->ci->config->item('crumb_close');
        
$this->crumb_last_open $this->ci->config->item('crumb_last_open');
        
$this->crumb_divider $this->ci->config->item('crumb_divider');
        
        
log_message('debug'"Breadcrumbs Class Initialized");
    }
    
    
// --------------------------------------------------------------------

    /**
     * Append crumb to stack
     *
     * @access    public
     * @param    string $page
     * @param    string $href
     * @return    void
     */        
    
function push($page$href)
    {
        
// no page or href provided
        
if (!$page OR !$href) return;
        
        
// Prepend site url
        
$href site_url($href);
        
        
// push breadcrumb
        
$this->breadcrumbs[$href] = array('page' => $page'href' => $href);
    }
    
    
// --------------------------------------------------------------------

    /**
     * Prepend crumb to stack
     *
     * @access    public
     * @param    string $page
     * @param    string $href
     * @return    void
     */        
    
function unshift($page$href)
    {
        
// no crumb provided
        
if (!$page OR !$href) return;
        
        
// add at firts
        
array_unshift($this->breadcrumbs, array('page' => $page'href' => $href));
    }
    
    
// --------------------------------------------------------------------

    /**
     * Generate breadcrumb
     *
     * @access    public
     * @return    string
     */        
    
function show()
    {
        if (
$this->breadcrumbs) {
        
            
// set output variable
            
$output $this->tag_open;
            
            
// construct output
            
foreach ($this->breadcrumbs as $key => $crumb) {
                
$keys array_keys($this->breadcrumbs);
                if (
end($keys) == $key) {
                    
$output .= $this->crumb_last_open '' $crumb['page'] . '' $this->crumb_close;
                } else {
                    
$output .= $this->crumb_open.'<a href="' $crumb['href'] . '">' $crumb['page'] . '</a> '.$this->crumb_close;
                }
            }
            
            
// return output
            
return $output $this->tag_close PHP_EOL;
        }
        
        
// no crumbs
        
return '';
    }

}
// END Breadcrumbs Class

/* End of file Breadcrumbs.php */
/* Location: ./application/libraries/Breadcrumbs.php */
  #16 (permalink)  
Antiguo 09/09/2015, 16:36
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Problema con URL de Controlador

La verdad que no encuentro nada anormal. mandame MP a ver si te puedo ayudar
__________________
la la la

Etiquetas: controlador, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:19.