新蒲京200.c软件下载-app官网网址 > 文章 >

付费投稿布署

本文由码农网 – 邱康原创,转发请看清文末的转发要求,招待到场大家的付费投稿安插!

眼前再给一个APP写API,同一时间还要写相应的后台管理网址。为了便于开荒和代码协会与治本,笔者说了算利用七个存世的框架。Codeigniter由于其轻量轻松自定制的特点吸引了自小编,一路开荒过来也许有差不离年时光了,写下局地协调在付出进度中的一些认识来与大家共勉。

开垦工具

开拓工具备大多,各类人的习贯也不及。Eclipse一向是笔者的最爱,那么怎么让Eclipse帮衬codeigniter呢?

率先那是个PHP项目,所以得让Eclipse扶持PHP。借令你的计算机已经设置了PHP,那么最简易的做法正是在Eclipse的market space中索求PDT并设置。具体操作:Help -> Eclipse Marketplace。在输入框中输入PDT,点击find,如图:

图片 1

点击右下方的install,等待几分钟就能够。

近些日子得以在Eclipse中写PHP了,可是对于codeigniter来讲,经常利用的讲话近似如下:

$this->load->model ( 'user_model' );

$this->input->post ('phone');

历次都要手动输入这么长的附近的说话对于追求急速的人的话确定是不可取的,所以得让Eclipse支持codeigniter特定的代码提醒,富含Controller和Model。把之类代码加多到

system/core/ 目录下的Controller文件中CI_Controller类的布局函数以前,那实际正是进展

变量申明,Model文件也是平等操作。

 /**
       * @var CI_Config
       */

       var $config;

       /**
       * @var CI_DB_active_record
       */

       var $db;

       /**
       * @var CI_Email
       */

       var $email;

       /**
       * @var CI_Form_validation
       */

       var $form_validation;

       /**
       * @var CI_Input
       */

       var $input;

       /**
       * @var CI_Loader
       */

       var $load;

       /**
       * @var CI_Router
       */

       var $router;

       /**
       * @var CI_Session
       */

       var $session;

       /**
       * @var CI_Table
       */

       var $table;

       /**
       * @var CI_Unit_test
       */

       var $unit;

       /**
       * @var CI_URI
       */

       var $uri;

       /**
       * @var CI_Pagination
       */

       var $pagination;

到现在效果如下:

图片 2

只需输入$this 就能够发生代码提示,效能提升不菲。

自定义帮忙函数和库

诚如一个档案的次序中会有不菲如出大器晚成辙的逻辑,会选拔到相近的代码。若是老是都去复制粘贴不独有劳顿並且不方便人民群众后续校勘,想到供给改革二个逻辑将要到每一个文件里改良代码就觉着骇人听闻(涉及到设计情势这一块了,值得我们学习)。所以您要善用运用这叁个自定义支持函数(helpers)和自定义的库(libraries)。把雷同的逻辑封装成函数恐怕类,每回遭受雷同的逻辑之时只需调用现存的helper可能library就可以,修正也只需求在helper大概library中大器晚成处改变,无需处处找代码。

举二个自身项目中的例子。API需求给应用程式发送的央浼重临json格式数据,那么在PHP中的生龙活虎种实现方式就是:

echo json_encode ( $data);//$data 是array类型的数据

而是假如$data中满含普通话字符的话,输出的json数据会把中文变成Unicode编码,为了幸免顾客端须求再度拍卖多少,供给加入一个参数,即:

echo json_encode ( $data , JSON_UNESCAPED_UNICODE);//$data 是array类型的数据

如此那般就能够出口原始的华语了。然而难题又来了,每趟都要写那样长风度翩翩段代码实乃辛劳,所以封装成三个帮扶函数。在application/helpers 文件夹中新建贰个文件render_helper.php。此中代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

/**

 * 打印不转义中文的json

 * @param [array] $data

 */

function echo_json($data) {

       echo json_encode ( $data, JSON_UNESCAPED_UNICODE );

}

那么每一次调用之时只需先在类中的布局函数载入该帮忙函数,如下:

$this->load->helper ( 'render' ); // 载入打印json的自定义辅助函数

就能够在本类的兼具成员函数中接收该格局:

echo_json ( $data);

如此那般省时省力(加上Eclipse的代码提醒,你只供给输入echo,那些函数就能够出去了)。今后必要改正成编码后普通话,恐怕转换到土耳其共和国语等等(古怪的需要~)你都得以只更改意气风发行代码,功用增高不菲。

长于缓存

大器晚成经二个应用软件的活跃客户不是不菲,那么金钱观的LAMP布局就能够应付了。然而随着客户的逐年增添,要想升高并发量,最棒照旧加多个缓存。在memcached和redis中,作者接纳了redis,首要归因于它数据类型更拉长(不仅仅扶助key-value型的数据,同一时候还提供list,set,zset,hash等数据布局的积存),能帮你完毕部分逻辑(制止重新造轮子)。与Eclipse配置同理,首先得让计算机上的PHP能够和redis通信(如若你的Computer已经设置了redis),那么首要推荐的是phpredis扩张,这里介绍一下本人在Debain服务器上的配置进度,推行的下令如下:

wget https://github.com/nicolasff/phpredis/archive/master.tar.gz  #下载扩展

tar xvf master.tar.gz      #解压目录

cd phpredis-master/     #进入解压后的目录

phpize

./configure --enable-redis

make && make install    #安装

#但是报错-bash: phpize: command not found(在使用apt-get install php5安装php时,默

#认是没有安装phpize的,我们安装phpredis时,需要用到phpize,因此,需要先安装#phpize。我们通过安装php开发者工具来获取phpize。执行如下命令即可: apt-get install #php5-dev)

ls  /usr/lib/php5/20100525/#根据安装提示的文件,结果:curl.so  gd.so  redis.so

vim /etc/php5/apache2/php.ini   #打开PHP配置文件

# Dynamic Extensions 后面添加extension=redis.so,因为上面命令结果显示有redis.so

/etc/init.d/apache2 restart       #重启Apache服务器

现行反革命PHP就会和redis通信了,测量检验如下:

<?php

 $redis = new Redis();

 $redis->connect('127.0.0.1',6379);

 $redis->auth('你的密码');//为了安全,要给redis设置密码

 $redis->set('tom','hanks');

 echo ' tom:'.$redis->get('tom'). '</br>';// tom:hanks

echo 'will:'.$redis->get('will'); //will:

?>

好了,以往驾临配置codeigniter使其能够运用redis的步子了。Codeigniter3.0.0本身具备redis扶植,但是它完成的功效过于单生龙活虎,没办法满意本人的工作必要,所以应当要更改。可是最为不要直接在/system/libraries/Cache/drivers/Cache_redis.php 中期维修正,因为从此以往codeigniter进级选取直接覆盖system文件夹的样式,会覆盖掉你的代码。所以最明智的做法仍然要好创办一个库,具体步骤如下:

1、在application/config/redis.php 中步向配置信息:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

$config ['socket_type'] = 'tcp';

config ['host'] = '你的服务器域名或者IP';

$config ['password'] = '你的redis密码';

$config ['port'] = 6379;

$config ['timeout'] = 0;

2、在application/libraries中创设如下图的文书布局

图片 3

Rediscli.php 代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

class Rediscli extends CI_Driver_Library {

       public $valid_drivers;

       public $CI;

       function __construct() {

              $this->CI = & get_instance ();

              $this->valid_drivers = array (

                            'default'

              );

       }

}

Rediscli_default.php 代码从/system/libraries/Cache/drivers/Cache_redis.php 间接拷贝过来,唯大器晚成的例外是把类名从CI_Cache_redis改为Rediscli_default,那样就会依照官方的行使情势应用我们相濡以沫写的库。

3、今后得以在Rediscli_default.php中丰盛可能涂改章程,具体操作决计于你协和的行使的供给。比如在作者的接受中,须要有限支撑贰个一定长度的行列,所以在Rediscli_default类中加多如下七个法子:

/**

       * 弹出链表头元素

       * @param unknown $key,链表名              

       */

       public function lpop($key) {

              return $this->_redis->lPop ( $key );

       }

       /**

       * 插入元素到表尾

       * @param unknown $key,链表名              

       * @param unknown $value,待插入值              

       */

       public function rpush($key, $value) {

              return $this->_redis->rPush ( $key, $value );

       }

有个别类须求调用该库时只需在其构造函数中增多如下代码:

$this->load->driver ( 'rediscli' ); // 加载redis自定义库

$this->rediscli->default->is_supported ();//判断是否支持redis并打开连接

则该类的各种函数就都得以接收Rediscli_default类中的任一方法,示比方下:

$this->rediscli->default->lpop('delnews');//弹出名为delnews的链表头元素

$this->rediscli->default->rpush('delnews',$nid);//该链表加入尾元素$nid

登入逻辑的贯彻

对于大家的应用软件来讲,各类需要都要咬定客商是或不是已登入,对于登入的法定客商不荒谬彰显央浼,对于未登陆的客户提醒“请首先登场入”。经常的web应用使用cookie-session机制,平日的session都是以文件格局保留在服务器上,考虑到文件访谈慢于内部存储器访谈,大家能够配备codeigniter的session保存于redis中。小编那边模仿这种体制:顾客寻常login后回来一个特定的id和一定的token(你能够自定义发生算法),服务器以id为key、token为value直接保存在redis中。今后的历次访谈APP都必需带上用appsecret(预订义)加密后的参数id和token,服务器端校验成功即健康再次回到数据,不然提醒“请首先登场入”。

那么是或不是每一种类都亟待写一回检查登录的代码呢?当然不可能那样干,大家能够自定义一个基类,在该基类的构造函数中反省登入状态(仍是可以在那间加载常用的赞助函数和库,比方上边的render_helper 和 rediscli)。然后别的的作业逻辑的类就一而再再而三该基类,并成功其本身逻辑就可以。

具体操作就是在 application/core 中新建文件 MY_Controller.php,该公文对应MY_Controller类(继承CI_Controller类)。该类只供给多个布局函数完毕上述效能就能够。

然后其余逻辑类只需继续MY_Controller类就无需再一次校验登入状态,而只需实现本人逻辑。

总结

Codeigniter是自己最心爱的四个PHP框架(比较于thinkPHP,Zend Framework等等),重要在于其易安装,轻量,易自定制的亮点。把握好这一个亮点,大家就能够写出不逊于那二个重量级框架写出来的利用,並且省时省力。

用作一个学子,在物色学习的中途还会有不菲难点亟待减轻,本文的意在和我们坐卧不安,更关键的是名门有何样提议依然研商请一定多多点拨哈,作者的微博:邱康singasong。

上一篇:付费投稿布署
下一篇:没有了