Hello stack-ers!
For the past 2 days I'v tried to extend the core Language class in CodeIgniter 2.1.3 with no luck.
So what did I do:
Created a class called MY_Language and extended it with CI_Language
Put a __construct function in the class and added this code
parent::__construct();
print_r("I've been 1337");
exit;
Now the whole thing looks like this:
class MY_Language extends CI_Language{
function __construct(){
parent::__construct();
print_r("I've been 1337");
exit;
}
}
Now this doesn't do anything when I call a controller :/
Am I doing something wrong? Or is there another approach to this?
Related
I want to load model using
$this->load->model('apotek_data');
function __construct()
{
parent::__construct();
$this->load->model('apotek_data');
$this->template->write_view('sidenavs', 'template/default_sidenavs', true);
$this->template->write_view('navs', 'template/default_topnavs.php', true);
$this->load->database();
}
But when I put it ($this->load->model) in my code, the view doesn't show, and display an error message.
Fatal error: Class 'CI_Template' not found in
D:\wamp64\www\apotek\system\core\Common.php on line 196
What should I do?
Load the template library:
$this->load->library('template');
OR:
In config/autoload.php add template in the libraries array.
I don't know the name of your library so I am assuming it is template if it is not - change it with the name of the library.
For any other person experiencing a 'CI_Template not found' error:
In my case, I was loading a library (in the constructor) with the same name as the controller that was being accessed.
class Authld extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->library('Authld');
}
}
I had to change the name of the controller for the issue to be resolved.
class Authentication extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->library('Authld');
}
}
Your Template.php maybe looks like this:
class Template extends MX_Controller{
If so, change the MX to CI (CI_Controller).
Troubles getting Code Igniter to work with my model...
File 1:
user_model.php
class User_Model extends CI_Model {
var $idUsers;
var $Email;
var $Password;
var $CreatedAt;
function __construct()
{
parent::_construct();
}
}
File 2:
autoload.php
$autoload['model'] = array('User_model');
The Error:
Fatal error: Class 'models\CI_Model' not found in /home/.../application/models/user_model.php on line 5...
The problems seems that CI_Model doesn’t exist in models, it exist in other place. system\core\Model.php
I am using CodeIgniter 2.1.4
I dont know whats wrong with this...?
your autoload is wrong
$autoload['model'] = array('User_model');
it should be
$autoload['model'] = array('User_Model');
and your constructor should be
parent::__construct();
The name of controller and model must different.
Your model name does not follow the correct convention:
Class names must have the first letter capitalized with the rest of the name lowercase.
So:
class User_Model extends CI_Model
should be:
class User_model extends CI_Model
!!! 'Autoload' was having problems with some models, I did not use 'autoload'.
First State:
I am Solution: (I've moved, the problem has improved)
When I try to call
$this->load->database();
yields the following error `"Call to a member function database() on a non-object"
Autoloading the database doesnt help too...
when I try to autoload it.
all calls to database like
$this->db->get('people');
it says get method is undefined...
I have no clue what and where to start..\
anyone ?
Go to autoload.php in application/config/autoload.php and add this
$autoload['libraries'] = array('database'); // add database in array
Make sure your connection settings are fine in application/config/database.php
Than in the library do it like this
Class MyLib
{
function getPeople(){
$CI = &get_instance();
$query = $CI->db->get('people');
return $query->result();
}
}
Use extends CI_Model if not working try extends Model
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
$this->load->database();
}
}
You can load the database by two methods:
Method 1:Automatic Connecting
$autoload['libraries']=array('database');
Method 2: Manual Connecting
$this->load>database();
i hope above methods clear your confusion....
You are doing a very common mistake. When you call $this->load->database(); from controller or model it works because controllers and models are child of CI_Controller and CI_Model respectively. But when you are call them from Library which is not a child class of any basic CIclass you cannot load database() or anything else using $this-> key. you must use the help of &get_instance(); to load codeigniter instance and use that instance instead of $this. Which suggests following Code:
$INST=&get_instance();//Store instance in a variable.
$INST->load->database();//If autoload not used.
$INST->db->get('people');//or Your desired database operation.
It is better to keep a field variable to hold the reference to $INSTas you may need to access it in various functions.
Following Code will be more eligent:
class MyLib{
var $INST;
public function __construct()
{
$INST=&get_instance();//Store instance in a variable.
$INST->load->database();//If autoload not used.
}
function getPeople(){
$query = $INST->db->get('people');
return $query->result();
}
}
I am a newbie to Codeigniter.
I have 3 libraries in autoload in config.php .
But in one of my controllers I don't want to load the libraries. Is this possible?
If you need any library throughout the application you can load it in the config file and it will be auto loaded. But if you need a library only in a specific controller you can load it in the controller where you need it.
Class test Extends CI_Controller{
function index()
{
$this->load->library('mylibrary');
$this->mylibrary->somemethod();
}
}
Or if you need library through out the controller you can load it in the constructor.
Class test Extends CI_Controller{
function __construct()
{
parent::__construct();
$this->load->library('mylibrary');
}
function index(){
$this->mylibrary->somemethod();
}
function test(){
$this->mylibrary->someothermethod();
}
}
Extend CI_Controller in your libraries.
Something like this:
class MyLibrary extends CI_Controller {
var $ci;
function __construct() {
$this->ci = &get_instance();
$route = $this->ci->router->fetch_class();
if( $route == strtolower('YourController') ) return false;
}
}
you can remove libraries from autoload file. then they will not be activ in the framwork.
If you want to use them, you can call them in constructors if you want them in a class. If you want to use them in just method, you load them in the method.
As I have read through articles, the best possible way to validate a user in all controllers of my application is to extend my own Controller that extends CI_Controller
But I can't make it work.
What I have is a members_controller that extends my MY_Controller.
in MY_Controller i have this piece of code, just to test if how am I going to utilize this.
<?php
class MY_Controller extends CI_Controller {
private $foo;
function __construct() {
parent::__construct();
$this->foo = 'hello world again';
}
}
in my members controller
<?php
class Members extends MY_Controller {
function index() {
$this->load->view('members');
}
}
in my members view
i want to access this variable i just set up, but i don't know how.
i tried echoing it out like this echo $foo, like this $this->foo
but neither work. thanks much!!
You need to pass the variable to your view file.
<?php
class Members extends MY_Controller {
function index() {
$data = array('foo' => $this->foo)
$this->load->view('members', $data);
}
}
Now you can refer to $foo inside your view. You may need to declare $this->foo as protected.
There's a video tutorial on MY_Controller that you may find useful at http://codeigniter.tv/a-10/Extending-the-core-MY_Controller-and-beyond
Have you tried passing the variable to the 'members view'.
$this->load->view('members',$foo);
You need to make $foo as protected and not private.
Then you will be able to access it in your controller that extends MY_Controller.php like this:
$this->foo
Today for the first time I used codeigniter 3. In the past I used version 2.x a lot of times. Now I can't extend CI_Controller:
application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
private $data = array();
function __construct() {
parent::__construct();
date_default_timezone_set("Europe/Zagreb");
$this->data['foo'] = "bar";
}
application/controllers/Welcome.php
class Welcome extends MY_Controller {
public function index() {
$this->data['main_content'] = 'home';
$this->load->view('template/template', $this->data);
}
application/view/home.php
(this is view loaded by $this->data['main_content'])
If I try to echo any data declared in MY_Controller, I get an error.
<?php echo $foo; ?>
A PHP ERROR WAS ENCOUNTERED
Severity: Notice
Message: Undefined variable: foo
Filename: template/header.php