learningtech
learningtech

Reputation: 33715

Code Igniter controller - can't use uri->segment with function index()?

I'm working with code igniter and for some reason, the url http://mysite.com/account/100 gives me a 404 error but http://mysite.com/account actualy works. Here's what my controller account.php looks like.

   class account extends Controller {


    function account()
    {
      parent::Controller();
    }

    function index()
    {
     echo 'hello';
      echo $this->uri->segment(2);
    }
    }

Any idea what's wrong?

Upvotes: 1

Views: 4277

Answers (3)

Hamza Rabbani
Hamza Rabbani

Reputation: 97

This is not working because when you request http://example.com/account, it looks index() method. But when you request http://example.com/account/100, is looking for 100() method. Which is not present. You may tweak the code like this.

class account extends Controller {
 public function account()
 {
   parent::Controller();
 }

 public function index()
 {
  echo 'hello';
 }

 public function id(){
  echo $this->uri->segment(2);
 }
 public function alternative($id){
  echo $id;
 }
}

you'll call url like this: http://example.com/account/id/100

or you can do like this http://example.com/account/alternative/100

Upvotes: 0

user2666633
user2666633

Reputation: 340

Add this route and you are good

$route['account/(:any)'] = "account/index/$1";

Upvotes: 0

Cory
Cory

Reputation: 1339

I just tested a simple account class like you have and it is trying to call 100 as a method of account, instead your URL after index.php should be account/index/100 and it works fine.

This can be solved using routing for example.

$route['account/(:num)'] = "accounts/index/$1";

is what you are looking for. You can look over the URI Routing user guide for more info.

CodeIgniter requires that your controller name be capitalized, and the filename lowercase so try changing your controller to.

class Account extends Controller { }

and your filename account.php

Upvotes: 4

Related Questions