2013-09-30 20 views
3
//inside admin controller  
public function pictures($table) 
{ 
    $image = new image_CRUD(); 
    $image -> set_table($table) 
      -> set_url_field('name') 
      -> set_title_field('title') 
      //-> set_ordering_field('priority') 
      -> set_image_path('assets/uploads'); 
    $output = $image -> render();    
    $this->view_output('images/main.php',$image -> render()); 
} 

URL的功能:localhost/my_site/admin/pictures/photos,我得到了css_files和js_files和無效的foreach參數()的未定義的變量一堆錯誤。當url是localhost/my_site/admin/pictures,代碼如下,它的工作原理是完美的。如何參數傳遞給呈現圖像污物

//inside admin controller  
public function pictures() 
{ 
    $image = new image_CRUD(); 
    $image -> set_table('photos') 
      -> set_url_field('name') 
      -> set_title_field('title') 
      //-> set_ordering_field('priority') 
      -> set_image_path('assets/uploads'); 
    $output = $image -> render();    
    $this->view_output('images/main.php',$image -> render()); 
} 

問題是,當使用codeigniter的方法傳遞圖像crud渲染函數的參數。雖然使用普通的方法的PHP爲http://localhost/my_site/admin/pictures?table=photos和代碼如下,它的工作原理,但我不能上傳圖像這種方式,會有上傳錯誤。

public function pictures() 
{   
     $image = new image_CRUD(); 
     $table = $_GET['table']; 
     $image -> set_table($table) 
     ...... 
} 

我該如何傳遞參數,如前所述?

OK我得到了解決。此前庫image_crud.php的getState()函數沒有爲URI段比數字小,「upload_file」,「ajax_list」,「排序」和「insert_title」等條件。所以錯誤是由於沒有找到合適的條件,代碼沒有執行。下面給出的代碼必須被添加到庫中:image_crud.php行477:

else 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/upload_file'); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url); 
      $state['ajax'] = isset($rsegments_array[3]) && $rsegments_array[3] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 

      return (object)$state; 
     } 

好這種方式已上傳文件時得到了一個錯誤。

以前在上傳文件時(雖然我們沒有第3個uri段),但它在第3個uri上添加了額外的段來定義image_crud的狀態。我修改它有第三個uri段的工作。所以在這種情況下,我有兩個條件。首先有第三個uri段和第二個,沒有第三個uri段。所以$ extra_segments變量被設置爲false(假的沒有額外的片段,即本地主機/ my_site/admin /圖片在我的情況下),而我們沒有第三個uri片段。對於檢查第三URI段,功能image_crud.phpset_table修改爲:

function set_table($table_name) 
{ 
    $this->table_name = $table_name; 

    if($table_name == $this->ci->uri->segment(3)) 
    { 
     $this->extra_segments = true; 
    } 

    return $this; 
} 

也是可變的是image_crud類(上線47我一樣)內聲明爲: protected $extra_segments = false; 現在的實際工作中,的getState( )功能修改如下。它可以進一步優化,使其乾燥和模塊化。

protected function getState() 
{ 
    $rsegments_array = $this->ci->uri->rsegment_array(); 

    if($this->extra_segments == true){ 

     if(isset($rsegments_array[4]) && is_numeric($rsegments_array[4])) 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/upload_file/'.$rsegments_array[3]); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/'.$rsegments_array[3].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url, 'relation_value' => $rsegments_array[4]); 
      $state['ajax'] = isset($rsegments_array[5]) && $rsegments_array[5] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 


      return (object)$state; 
     } 
     elseif((empty($rsegments_array[4]) && empty($this->relation_field)) || (!empty($rsegments_array[4]) && $rsegments_array[4] == 'ajax_list')) 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/upload_file'); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url); 
      $state['ajax'] = isset($rsegments_array[4]) && $rsegments_array[4] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 

      return (object)$state; 
     } 
     elseif(isset($rsegments_array[4]) && $rsegments_array[4] == 'upload_file') 
     { 
      #region Just rename my file 
       $new_file_name = ''; 
       //$old_file_name = $this->_to_greeklish($_GET['qqfile']); 
       $old_file_name = $this->_convert_foreign_characters($_GET['qqfile']); 
       $max = strlen($old_file_name); 
       for($i=0; $i< $max;$i++) 
       { 
        $numMatches = preg_match('/^[A-Za-z0-9.-_]+$/', $old_file_name[$i], $matches); 
        if($numMatches >0) 
        { 
         $new_file_name .= strtolower($old_file_name[$i]); 
        } 
        else 
        { 
         $new_file_name .= '-'; 
        } 
       } 
       $file_name = substr(substr(uniqid(), 9,13).'-'.$new_file_name , 0, 100) ; 
      #endregion 

      $results = array('name' => 'upload_file', 'file_name' => $file_name); 
      if(isset($rsegments_array[5]) && is_numeric($rsegments_array[5])) 
      { 
       $results['relation_value'] = $rsegments_array[5]; 
      } 
      return (object)$results; 
     } 
     elseif(isset($rsegments_array[4]) && isset($rsegments_array[5]) && $rsegments_array[4] == 'delete_file' && is_numeric($rsegments_array[5])) 
     { 
      $state = array('name' => 'delete_file', 'id' => $rsegments_array[4]); 
      return (object)$state; 
     } 
     elseif(isset($rsegments_array[4]) && $rsegments_array[4] == 'ordering') 
     { 
      $state = array('name' => 'ordering'); 
      return (object)$state; 
     } 
     elseif(isset($rsegments_array[4]) && $rsegments_array[4] == 'insert_title') 
     { 
      $state = array('name' => 'insert_title'); 
      return (object)$state; 
     } 
     else 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/upload_file'); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url); 
      $state['ajax'] = isset($rsegments_array[4]) && $rsegments_array[4] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 

      return (object)$state; 
     } 
    } 
    elseif($this->extra_segments == false) 
    { 
     if(isset($rsegments_array[3]) && is_numeric($rsegments_array[3])) 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/upload_file/'.$rsegments_array[3]); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/'.$rsegments_array[3].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url, 'relation_value' => $rsegments_array[3]); 
      $state['ajax'] = isset($rsegments_array[4]) && $rsegments_array[4] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 


      return (object)$state; 
     } 
     elseif((empty($rsegments_array[3]) && empty($this->relation_field)) || (!empty($rsegments_array[3]) && $rsegments_array[3] == 'ajax_list')) 
     { 
      $upload_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/upload_file'); 
      $ajax_list_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/ajax_list'); 
      $ordering_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/ordering'); 
      $insert_title_url = site_url($rsegments_array[1].'/'.$rsegments_array[2].'/insert_title'); 

      $state = array('name' => 'list', 'upload_url' => $upload_url); 
      $state['ajax'] = isset($rsegments_array[3]) && $rsegments_array[3] == 'ajax_list' ? true : false; 
      $state['ajax_list_url'] = $ajax_list_url; 
      $state['ordering_url'] = $ordering_url; 
      $state['insert_title_url'] = $insert_title_url; 

      return (object)$state; 
     } 
     elseif(isset($rsegments_array[3]) && $rsegments_array[3] == 'upload_file') 
     { 
      #region Just rename my file 
       $new_file_name = ''; 
       //$old_file_name = $this->_to_greeklish($_GET['qqfile']); 
       $old_file_name = $this->_convert_foreign_characters($_GET['qqfile']); 
       $max = strlen($old_file_name); 
       for($i=0; $i< $max;$i++) 
       { 
        $numMatches = preg_match('/^[A-Za-z0-9.-_]+$/', $old_file_name[$i], $matches); 
        if($numMatches >0) 
        { 
         $new_file_name .= strtolower($old_file_name[$i]); 
        } 
        else 
        { 
         $new_file_name .= '-'; 
        } 
       } 
       $file_name = substr(substr(uniqid(), 9,13).'-'.$new_file_name , 0, 100) ; 
      #endregion 

      $results = array('name' => 'upload_file', 'file_name' => $file_name); 
      if(isset($rsegments_array[4]) && is_numeric($rsegments_array[4])) 
      { 
       $results['relation_value'] = $rsegments_array[4]; 
      } 
      return (object)$results; 
     } 
     elseif(isset($rsegments_array[3]) && isset($rsegments_array[4]) && $rsegments_array[3] == 'delete_file' && is_numeric($rsegments_array[4])) 
     { 
      $state = array('name' => 'delete_file', 'id' => $rsegments_array[4]); 
      return (object)$state; 
     } 
     elseif(isset($rsegments_array[3]) && $rsegments_array[3] == 'ordering') 
     { 
      $state = array('name' => 'ordering'); 
      return (object)$state; 
     } 
     elseif(isset($rsegments_array[3]) && $rsegments_array[3] == 'insert_title') 
     { 
      $state = array('name' => 'insert_title'); 
      return (object)$state; 
     } 
    } 
} 

而且url助手必須自動加載或加載到URI檢查功能。

+0

需要傳遞是什麼樣的參數添加一條線嗎?爲什麼不通過郵寄?! –

+1

@mamdouhalramadan我需要傳遞一個表名到控制器來訪問不同表格的照片。 – RY35

回答

0

您可以url_helper

做你的控制器的構造函數

$this->load->helper('url'); 

public function pictures() 
{ 
    $table = $this->uri->segment(3, 0); 
    $image = new image_CRUD(); 
    $image -> set_table($table) 
      -> set_url_field('name') 
      -> set_title_field('title') 
      //-> set_ordering_field('priority') 
      -> set_image_path('assets/uploads'); 
    $output = $image -> render();    
    $this->view_output('images/main.php',$image -> render()); 
} 
+1

和問題是一樣的。在uri中傳遞第三個段時總會有錯誤。 – RY35

+1

好的,我得到了解決方案。 – RY35

+0

@ ry35xq28發佈您的解決方案.. –