0

このコードがOKな理由

$this->sch_teacher_id = $this->ion_auth->user_by_username("vika")->row()->id;

しかし、これはうまくいきませんか?

$this->sch_teacher_id = $this->ion_auth->user_by_username($this->uri->segment(3))->row()->id;

私の URL は domain:8888/admin_schedule/teacher/vika です

route.php が含まれています

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

関数 __construct()でコード行を使用し、その結果を別のコントローラー関数で使用します。これは、3 つの関数がこの結果を使用するためです。このコードをこの関数の 1 つに移動して$this->uri->segment(3)を使用すると、「vika のレッスン」ではなく、「自分のレッスン」が得られるので、

public function user_by_username($username = FALSE)
    {
        $this->trigger_events('user');

        //if no id was passed use the current users id
        $username || $username = $this->session->userdata('username');

        $this->limit(1);
        $this->where($this->tables['users'].'.username', $username);

        $this->users();

        return $this;
    } 

うまくいきます。しかし、 $this->uri->segment(3) を user_by_username 関数のパラメーターとして使用すると、機能しません!

次の方法で生成されたページ: コントローラー admin_schedule には、ビュー index.php をレンダリングする関数 index があります。そして、そのビューでは、admin_schedule controller = get_schedule_db_recurring_events_on_daysweek から別の関数を呼び出す javascript を使用します。

...
{
                url: '/admin_schedule/get_schedule_db_recurring_events_on_daysweek/',//"<?echo $data_path?>",
                backgroundColor: 'red',
            }

そしてコントローラーで

function get_schedule_db_recurring_events_on_daysweek()
    {   
        $start = date('Y-m-d H:i', $this->input->get('start')); 
        $end = date('Y-m-d H:i', $this->input->get('end')); 
        $sch_teacher_id = $this->uri->segment(3); // <--- this doesn't work, but $sch_teacher_id = 111 works perfectly
        $result=$this->Schedule_model->get_schedule_recurring_events_on_daysweek($start, $end, $sch_teacher_id);
        $count=count($result);      
        if($count>0){
                echo json_encode($result);
        }
    }

この問題を理解するのを手伝ってください。

4

2 に答える 2

0

問題を解決しました!

ajax 呼び出しが原因で何か問題が発生したと考えてください。したがって、コントローラーでコーディングすると

function __construct()
 {
        parent::__construct();
        ...

        $this->sch_teacher_row = $this->ion_auth->user_by_username($this->uri->segment(3))->row();
        $this->data['sch_teacher_id'] = $this->sch_teacher_row->id;
        $this->data['subtitle'] = $this->sch_teacher_row->username;          
 } 

次に、正しい値 ('vika')、またはより正確にはビュー ファイルに vika の ID ('911')がありますが、コントローラーの他の機能にはありません。しかし、jQuery $.ajax オプションデータを使用して、この値 (sch_teacher_id) をビューからこのコントローラーに渡すことができます。

eventSources: [
...         
{
                url: '/admin_schedule/get_schedule_db_recurring_events_on_daysweek/',//"<?echo $data_path?>",
                type: 'GET',
                data: {sch_teacher_id: sch_teacher_id},
                backgroundColor: 'red',
            }  
        ],

次に (山の反対側で) この GET パラメータをキャッチし、モデル関数にキックします。

function get_schedule_db_recurring_events_on_daysweek()
    {   
        ...
        $sch_teacher_id_from_view = $this->input->get('sch_teacher_id');
        $result=$this->Schedule_model->get_schedule_recurring_events_on_daysweek($start, $end, $sch_teacher_id_from_view);
        ...
    }

そして、それはすべてブレイクダンスです。

于 2012-11-28T18:42:49.273 に答える
0

理由を思い出せません-それはあなたが受け入れることを学んだ単なるCIの癖です- $this->uri->segment(3) などを引数として直接使用することはできません。それを割り当ててから渡す必要があります@almix が彼の健全性テストで提案したように。

少なくとも私は、それを引数として直接使用するのに常に問題を抱えていました-誰かが私を修正してくれるとうれしいです!

于 2012-11-28T15:41:06.400 に答える