2013-09-30 19 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发布您的解决方案.. –