0

HMVCに問題があります

私はこのようなすべてのモジュールに管理コントローラーを持っています

-モジュール

 -ユーザー
     -コントローラー
         --admin.php
         --users.php
     -ビュー
         --admin_create_user.php
         --admin_view_users.php
         --signup.php
         --login.php

 - ニュース
     -コントローラー
         --admin.php
         --news.php
     -ビュー
         --admin_disply_news.php
         --admin_create_news.php
         --view_news.php

これで、ユーザー管理者に移動すると、URLはこれにリンクされます

  • domain.com/users/admin/method。
  • domain.com/news/admin/method。

しかし、私はそれが必要です

  • domain.com/admin/users/method
  • domain.com/admin/news/method
4

2 に答える 2

1

これらのコードを「MY_Router」クラス内の「core/MY_Router.php」に追加します-*(クラスMY_Router extends MX_Router {** ---コードはここに入ります-**})*

ルーティングルールと.htaccessを使用してこれを実行しようとしましたが、いずれも機能しません。次に、MX_Routerコードを編集して完全に機能しますが、モジュールのコントローラー呼び出し「admin」にサブフォルダーを作成し、コントローラーをこのように機能させる必要があることに注意してください。この方法では、デフォルトのルーティングを使用できます。コントローラ名がモジュール名と同じ場合は、コントローラを直接呼び出すことによってモジュール。

public $module;
private $located = 0;

protected function _set_request($segments = array()){
    $segments = $this->_validate_request($segments);
    // If we don't have any segments left - try the default controller;
    // WARNING: Directories get shifted out of the segments array!
    if (empty($segments))
    {
        $this->_set_default_controller();
        return;
    }

    if ($this->translate_uri_dashes === TRUE)
    {
        $segments[0] = str_replace('-', '_', $segments[0]);
        if (isset($segments[1]))
        {
            $segments[1] = str_replace('-', '_', $segments[1]);
        }
    }

    if($segments[0] == 'admin' && isset($segments[1])){
        if (isset($segments[2])){
            $this->set_method($segments[2]);
            $segments[2] = $segments[2];
        }else{
            $this->set_method('index');
            $segments[2] = 'index';
        }
        $this->directory    = '../modules/'.$segments[1].'/controllers/admin/'; 
        $this->module       = $segments[1];
        $this->class        = $segments[1];

        $segments[1] = $segments[1];


        unset($segments[0]);
        $this->uri->rsegments = $segments;
    }else{
        $segments = $this->locate($segments);

        if($this->located == -1)
        {
            $this->_set_404override_controller();
            return;
        }

        if(empty($segments))
        {
            $this->_set_default_controller();
            return;
        }

        $this->set_class($segments[0]);

        if (isset($segments[1]))
        {
            $this->set_method($segments[1]);
        }
        else
        {
            $segments[1] = 'index';
        }

        array_unshift($segments, NULL);
        unset($segments[0]);
        $this->uri->rsegments = $segments;  
    }   
}
于 2015-07-09T18:34:53.720 に答える
0

これをルート設定ファイルに追加してみてください。

$route['domain.com/admin/users/(:any)'] = 'domain.com/users/admin/method';
$route['domain.com/admin/news/(:any)'] = 'domain.com/news/admin/method';

ユーザーがdomain.com/admin/users/methodと入力すると、ユーザーコントローラーが呼び出されます。

ドキュメンテーション

于 2012-10-07T12:59:44.503 に答える