0

これに対する解決策を暫定的に見ることはできますが、明らかに明白で簡単なアプローチがあるのではないかと考えていました。

私の目的は、特定の URI の最初のセグメントを使用して、どのコントローラーを実行する必要があるかを DB に照会することです。

セグメント 1 の結果のコントローラー名を使用して URI を再構成し、システムが通常どおり処理を続行できるようにする必要があると思います (したがって、pre_system フック)。

必須ではありませんが、同じ DB リクエストからの他の変数をいくつか保持して、後でコール スタックで使用したいと思います。これは、グローバル変数を使用して行う必要があると思いますか?

より良い提案は喜んで受け取られます。

ありがとう。

4

2 に答える 2

4

他の人に役立つ場合は、目的の結果を達成するためのコードを次に示します。ただし、これは追加の変数を渡すことを考慮していません。それらがなくても生きていけるからです。

function set_controller()
{
    include_once APPPATH.'config/database.php'; //Gather the DB connection settings
    $link = mysql_connect($db[$active_group]['hostname'], $db[$active_group]['username'], $db[$active_group]['password']) or die('Could not connect to server.' ); //Connect to the DB server
    mysql_select_db($db[$active_group]['database'], $link) or die('Could not select database.'); //Select the DB
    $URI = explode('/',key($_GET)); //Break apart the URL variable
    $query = 'SELECT * FROM theDomainTable WHERE domainName = "'.$URI[1].'"'; //Query the DB with the URI segment
    if($results = mysql_fetch_array(mysql_query($query))){ //Only deal with controller requests that exist in the database
        $URI[1] = $results['controllerName']; //Replace the controller segment
        $_GET = array(implode('/',$URI)=>NULL); //Reconstruct and replace the GET variable
    }
    mysql_close($link); //Close the DB link
}
于 2010-05-28T07:24:01.630 に答える
0

グローバル変数は使用しません。可能であれば、後で取得できるようにライブラリに保存することをお勧めします。グローバル変数は、CI のコンテキストではややこしいものです。

このpre_system 時点では、ベンチマークとフック クラスのみがロードされています。pre_controllerこれは、すべての基本クラスがロードされ、データをより論理的な場所に配置できるように、コントローラーを選択する方法を見つけられない限り、グローバル変数にかなり悩まされていることを意味します。

于 2010-05-21T22:02:46.353 に答える