1

人々が mysite.com/username にアクセスできるソーシャル ネットワークを開発しようとしています。_remap 関数を使用して動作させましたが、他のコントローラーをロードしていません。誰か助けてください。

これは私のデフォルトのコントローラです:

if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class Welcome extends CI_Controller {

    public function index($username = NULL)
    {
        $this->load->model('user_model');
        if ($this->user_model->is_a_username($username)) {
            $data['title'] = $username;
            $data['main_content'] = 'users/profile_page';
            $this->load->view('shared/template',$data);
        } else {
            $this->home();
        }
    }

    public function _remap($method, $params = array())
    {
        if (method_exists($this, $method))
        {
            return call_user_func_array(array($this, $method), $params);
        }
        show_404();
    }

    public function home()
    {
        if ($this->ion_auth->logged_in()) {
            $data['title'] = 'Carnect';
            $data['main_content'] = 'users/wall_page';
            $this->load->view('shared/template',$data); #if logged in show the user's wall
        } else {
            $data['title'] = 'Carnect';
            $data['main_content'] = 'welcome/index';
            $this->load->view('shared/template',$data); #if not logged in show the home page
        }       
    }
}

これは私のルートファイルです:

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$route['default_controller'] = "welcome";
$route['404_override'] = '';


$route['login'] = "auth/login";
$route['logout'] = "auth/logout";
$route['register'] = "auth/create_user";


/*$route['news'] = "news/index";
$route['politics'] = "politics/index";
$route['culture'] = "culture/index";
$route['messages'] = "messages/index";*/


$route['(:any)/(:any)'] = "$1/$2";
$route['(:any)/(:any)/(:any)'] = "$1/$2/$3";
$route['(.*)'] = 'welcome/index/$1';

ロードされないコントローラーの 1 つの例。

session_start();

class News extends CI_Controller {

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

    function index() {
        $data['title'] = 'Politics';
        $data['main_content'] = 'news/index';
        $this->load->view('shared/template',$data);
    }
}

4

2 に答える 2

1

私はそれらのURLに同様の要件があるプロジェクトに取り組んでいます。

私はこのようなルートを追加することによってそれをしました:

$routes['news'] = 'news/index';

また

$routes['news'] = 'news';

これはまさにあなたがコメントした行です。

悲しいことに、それらの行なしでは不可能です(少なくとも私はそれを行うことができませんでした)。

URLがexample.com/news/indexの場合、ルール$routes['(:any)/(:any)']に一致しますが、の場合、example.com/news何にも一致せず、最後のルールに移動します。

CodeIgniterのルーティングは実際のセグメントを取りませんが、URLに示されているuriセグメントを取ります。したがって、URLexample.com/newsは。として解釈されます$username = news

uriセグメントが1つしかないURLごとにこのURIルーティングを実行する必要があります。コントローラと同じユーザー名を持つユーザーがいないことを確認する必要があります。そうしないと、ユーザーページにアクセスできなくなります。

于 2012-11-26T08:36:27.433 に答える
0

application/config/routes.php次の行を追加するだけで、ファイルにルールを記述する必要があります

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

URLからファイルhttp://example.com/usernameを削除するための.htaccessルールを追加した場合、または次のようにアクセスできる場合は、使用してアクセスできますindex.phphttp://example.com/index.php/username

于 2012-11-26T08:10:32.013 に答える