codeigniter学习3

扩展helper,在要扩展的helper前加上MY_,比如要扩展form helper,则命名为
MY_form_helper.php,放在system/application/helpers/目录下即可

2扩展CI的库的话,依然是加MY_前缀的规则,比如
<?php
class MY_Session extends CI_Session
{
function MY_Session()
{
parent::CI_Session();
}
}
?>

3 如果要改CI的core libraries的话,可以这样
  <?php
class CI_Session
{
}
?>
  使用的时候,跟之前一样的
$this->load->library('session');

4 benchmark的libraies的
  benchmark这个是很好用的,可以计算两个方法执行的时间,使用方法为:
$this->benchmark->mark('start');
// something happens here
$this->benchmark->mark('end');
echo $this->benchmark->elapsed_time('start', 'end');

当然也可以任意组合,比如三个的情况:
  $this->benchmark->mark('tea');
// something happens here
$this->benchmark->mark('coffee');
// something else happens here
$this->benchmark->mark('biscuits');
echo $this->benchmark->elapsed_time('tea', 'coffee');
echo $this->benchmark->elapsed_time('coffee', 'biscuits');
echo $this->benchmark->elapsed_time('tea', 'biscuits');


5 使用profile class
  profile是会输出benchmark的结果的
$this->output->enable_profiler(TRUE)
禁止:
$this->output->enable_profiler(FALSE);
<?php echo $this->benchmark->elapsed_time(); ?>
上面当elapsed_time不带参数时,表示显示所有的总时间

6 上传文件
  <?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>

File:<br />
<input name="file" type="file" /><br />

<input type="submit" name="submit" value="Upload" />

<?php echo form_close(); ?>
  
   处理器接收文件部分:
  class Upload extends Controller
{
function Upload()
{
parent::Controller();
$this->load->helper(array('form', 'url', 'file'));
}

function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}

function do_upload()
{
$config['upload_path'] = APPPATH . 'uploads/';
$config['allowed_types'] = 'jpeg|jpg|gif|png';
$config['max_size'] = '10240000';

$this->load->library('upload', $config);

$field_name = "file";

if ( ! $this->upload->do_upload($field_name))
{
$error = array('error' => $this->upload->display_errors());

$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());

$this->load->view('upload_success', $data);
}
}

我们最后用一个upload_success去输出上传的信息:
  <?php foreach($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>

7 常见的表单验证步骤,注意要用到form_validation了,
  function index()
{
$this->load->library(array('email', 'form_validation'));
$this->load->helper(array('email', 'form'));

$this->form_validation->
set_rules('name', 'Name', 'required|xss_clean');
...................
if($this->form_validation->run() == FALSE)
{
$this->load->view('email'); // load the contact form
}
else
{
$name = $this->input->post('name');

......

}

8 在校验表单时,可以使用callback的验证,比如在校验时,使用自定义的函数,如
$this->form_validation->
set_rules('email', 'Email Address',
'required|valid_email|callback_add_user|xss_clean');
这里用callback_XXXX来定义自己要校验的函数,这里是add_user,即可编写:
function add_user($email) { }

9 Database中的方法链
  PHP5中,可以这样了:
$this->db->select('name, email')->from('users')->
where('id', 5)->limit(10, 20);
$query = $this->db->get();
这实际上效果是:
SELECT name, email FROM `users` WHERE `id` = 5 LIMIT 10, 20

10 使用database forge类进行操作数据库类
$this->load->dbforge();
创建数据库
  if ($this->dbforge->create_database('my_db'))
{
echo 'Database created!';
}
删除数据库
if ($this->dbforge->drop_database('my_db'))
{
echo 'Database deleted!';
}


11 扩展CI
  CI提供了不少扩展点:
  pre_system:
   当系统执行前,会执行这个扩展点;
  pre_controller:
   在controller执行前,会执行这个扩展点;
  post_controller_constructor:
  当controller已经被实例化后执行,但在所有方法执行前执行;
  post_controller:
   当controller执行后执行;
  post_system:
   当所有页面发送到浏览器后,执行;

设置hooks:
   设置为:$config['enable_hooks'] = TRUE;
比如要设置一个网站维护时用的特别扩展点,可以先在config/hooks.php 中如下设置:
   $hook['pre_controller'] = array(
'class' => 'Maintenance',
'function' => 'decide',
'filename' => 'maintenance.php',
'filepath' => 'hooks',
'params' => 'FALSE'
);
   然后在application/hooks文件夹下建立如下文件:
  <?php
class Maintenance
{
  function decide($maintenance)
{
if($maintenance == TRUE)
{
show_error('The system is offline for maintenance.');
}
}
}
?>


 
12 数组helper

$this->load->helper('array');
$items = array(
'England' => 'London',
'Wales' => 'Cardiff',
'Scotland' => 'Edinburgh',
'Northen Ireland' => 'Belfast');
// returns 'Edinburgh'
echo element('scotland', $items);

  element方法是在数组中根据KEY去找value,如果找不到则返回false;


你可能感兴趣的:(PHP,浏览器)