函数名称和视图名称(控制器类)之间的关系/在codeIgniter框架(php)中使用load-> view和load-> model的工作

while working yesterday with codeIgniter I found some strange(I don't know what to call),maybe I don't know whether it is normal or not as am a rookie using this framework.Below is my controller class.

class Posts extends CI_Controller

{

public function __construct() {
    parent::__construct();
    $this->load->model( 'post' );
}

public function index() {
    // echo "<pre>";
    // print_r($data['posts']);
    // echo "</pre>";
    $data['posts']=$this->post->get_posts();
    $this->load->view( 'post_index', $data );
}

public function post( $postID ) {
    $data['post']=$this->post->get_post_by_ID( $postID );
    $this->load->view( 'post', $data, FALSE );
}

I found that strange in function "post" the reason is simple if I change the function name then I will get the error-page not found.

Why is that?? Is it necessary to have function name and view name to be same.As I told am a beginner to this framework.So please co-operate and provide your precious feedback.

Function name and view name do not need to be the same. Your view can be anything you want it to be so long as you call the filename (and sometimes path) correctly :)

The biggest problem I see here is you are trying to access some object called posts, which I do not see defined. I have a good hunch you're looking for the "input" object provided by code igniter.

That being said, replace:

$this->post->get_posts();

With:

$this->input->post(NULL,true);//return all post objects with cross site scripting scrub

And replace:

$this->post->get_post_by_ID($postID);

With:

$this->post->post('postID',true);//same as above, except again, with XSS scrub enabled.

If this is not your answer and you need me to re-evaluate, please let me know in a comment and I'll redo the answer.

With regards to your page not found issue, it's because Codeigniter automatically assumes the paths depending on what you name your functions. It uses the following convention by default (routes.php allows you to override this in config/routes.php)

site.com/index.php/controller_name/method_name/param_1/param_2/param_n

Or if you have mod_rewrite taking out the front controller

site.com/controller_name/method_name/param_1/param_2/param_n

Since the view is loaded from the controller function itself, if you change the name of that function, then the URL will no longer be able to "find" it, hence the error.