name libreria library lib custom create php codeigniter controller helper

php - libreria - codeigniter-usar helper en el controlador no funciona



my helper codeigniter (4)

En su lugar, crea una clase de biblioteca y define tu función allí. A continuación, cargue la biblioteca en el controlador y llame a la función de biblioteca. Puede cargar la biblioteca en cualquier controlador y usar sus métodos.

Necesito usar una función en múltiples controladores. Así que pensé en usar un ayudante personalizado, pero parece que no puedo hacerlo funcionar. (Funciona en la vista, pero lo necesito en el controlador)

Me da el siguiente error fatal:

Error fatal: llamada al método indefinido Developers :: checkIfLoggedIn () en /application/controllers/developers.php en la línea 12

¿Es una movida inteligente usar un ayudante para usar una función en múltiples controladores, o debería hacerlo de otra manera?

Gracias por adelantado,
marca

EDITAR:
Archivo de controlador:

if (!defined(''BASEPATH'')) exit(''No direct script access allowed''); class Developers extends CI_Controller { public function __construct() { parent::__construct() $this->load->helper(''form''); $this->load->helper(''url''); $this->load->helper(''login''); //helper function checkIfLoggedIn($this->session->userdata(''loggedIn'')); } }

Archivo de ayuda:

if (!defined(''BASEPATH'')) exit(''No direct script access allowed''); if (!function_exists(''checkIfLoggedIn'')) { function checkIfLoggedIn($session_loggedIn) { $loggedIn = $session_loggedIn; if($loggedIn == false) { redirect(''login/''); } } }

}


Ok, sé que esta pregunta se hizo hace 5 meses, pero tal vez algunas personas lo encuentren útil. Acababa de tener el mismo problema y descubrí que el nombre de archivo de mis funciones auxiliares era un nombre de archivo que ya usaba CodeIgniter.

Entonces, si no recibe la advertencia: ''No se puede cargar el archivo solicitado'', sino que aparece la advertencia: ''Error fatal: llamada a la función no definida [nombre_función], probablemente esté usando un nombre de archivo que ya existe de forma nativa.


En su controlador lo está usando de manera incorrecta, no es un método de control, por lo que no puede usar $this para llamarlo.

Un ayudante puede cargarse en cualquier lugar dentro de las funciones de su controlador (o incluso dentro de sus archivos de visualización, aunque no es una buena práctica), siempre que lo cargue antes de usarlo. Puede cargar sus ayudantes en el constructor de su controlador para que estén disponibles automáticamente en cualquier función, o puede cargar un ayudante en una función específica que lo necesite.

Para cargar un ayudante puedes usar

$this->load->helper(''name''); // name is the name of the file without extention

A diferencia de la mayoría de los otros sistemas en CodeIgniter, los Ayudantes no están escritos en un formato orientado a objetos. Son simples funciones de procedimiento. Cada función auxiliar realiza una tarea específica, sin dependencia de otras funciones.

Entonces, para llamar a una función auxiliar en un controlador, no debes usar

$this->function_name();

en su lugar use

function_name();

Por ejemplo, si tiene una función auxiliar en un archivo auxiliar llamado myCustomHelper.php siguiente manera

function myHelper() { // code }

luego puede cargarlo en el controlador y llamarlo de la siguiente manera

$this->load->helper(''myCustomHelper''); myHelper(); // call the function

pero es mejor cargar ayudantes en el constructor para que esté disponible a través de todo el script.

Actualización: si el nombre de su archivo auxiliar es login_helper.php , puede usarlo en su controlador de la siguiente manera

$this->load->helper(''login_helper''); checkIfLoggedIn($this->session->userdata(''loggedIn''));

Lea más aquí .


En un asunto relacionado: tenga cuidado al poner $ this-> load en el __constructor: en PHP debe entonces llamar explícitamente a parent :: __ construct (); de lo contrario, el constructor padre ya no se llama, dejando $ this-> load undefined. La solución anterior lo hace correctamente, pero es fácil pasar por alto.

class My extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper(''url''); }

Si no lo haces, recibirás el mensaje de error de que My :: $ load no existe y el helper no se cargará.