按 ‘ CodeIgniter ’ 标签归档

CodeIgniter学习(三)

前面学习了Controller和Model,MVC中的MC都有了,就差‘V’—View了。CodeIgniter里的View比较简单,没有Smarty那么复杂,基本就是在Html里嵌入PHP代码,Controller里的数据(Array型)注入到View里将自动转换成对应key命名的变量或数组。

CodeIgniter里的view文件都存放在Application/views目录下,在这里目录里创建一个demo.php.添加如下内容:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?=$hello?>
  6. </body>
  7. </html>

将Controller Demo.php中的function index()函数改为:

  1. function Index()
  2. {
  3. $data["hello"] = "From variable."
  4. $this->load->view('demo',$data);
  5. }

访问http://yoururl/index.php/demo/,页面显示的内容即为变量中的值。

当你有多个值要传递到View时,可以这样

  1. function Index()
  2. {
  3. $data = array('name'=>'cbc', 'sex'=>'male','abc'=>array('a','b','c'));
  4.  
  5. $this->load->view('demo');
  6. }

View.php就可以这样使用:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?=$name?><br>
  6. <?=$sex?><br>
  7. <?
  8. foreach($abc as $v)
  9. {
  10. echo("$v<br>");
  11. }
  12. ?>
  13. </body>
  14. </html>

有时候为了将文件存放的更合理一点,和controller一样,假设将View demo.php放到application/views/admin下,在controller里就应该这样调用:

  1. function Index()
  2. {
  3. $this->load->view('admin/demo');
  4. }

好了,到这里我们基本已经掌握了,MVC的使用.后面将继续我们的CodeIgniter之旅:
如何访问数据库
如何获取表单的内容
如何使用session及数据库存储session

CodeIgniter学习(二)

上一篇学习了Controller的使用,这里我们要学习Model的使用,使用也非常简单,首先在application/models目录下创建文件demomodel.php,延续上一篇里控制器名称,这里的model命名为Demomodel,同样,文件名和类名相同。

  1. class Demomodel extends Model
  2. {
  3. function __construct()
  4. {
  5. parent::Model();//这是必须地
  6. }
  7. function get_hello()
  8. {
  9. return 'Hello,world.Demomodel::get_hello().';
  10. }
  11. }

在controller的index()方法里,添加一下代码:

  1. $this->load->model('demomodel');
  2. $this->demomodel->get_hello();
  3. //$this->load->model('demomodel','ModelAlias');//这是别名
  4. //$this->ModelAlias->get_hello();//这里这里使用了上面的别名

再访问http://yoururl/index.php/demo/访问,将显示“Hello,world.it’s from Demomodel::get_hello().”

CodeIgniter学习(一)

最近要做一PHP网站,采用现有开源代码进行二次开发,恐怕改动很多,自己从头开发感觉工作量太打,决定采用框架,过去使用过Zend Framework,感觉框架很庞大,部署也不是很方便,必须要求PHP5.1.4以上,而且要支持URL重写,这比较麻烦,国内很多虚拟主机服务商都不提供URL重写,PHP5的空间也不是很多,最终放弃了采用ZF的念头,最后选择了CodeIgniter。

CodeIgniter框架相对于ZF而言身材苗条了很多,是个轻量级的框架。

优点

  • 支持PHP4.3.2以上版本,尤其是国内很多空间服务商那里卖的大多是PHP4的空间。
  • 开发&部署很容易,下载CodeIgniter解压到网站目录,访问你的URL会惊奇的发现网站已经可以访问了,虽然它只是一个DEMO页,框架为我们提供了一种快速开发的可能,这样就可以把所有心思放在业务逻辑上,设计Model,添加编写Control,然后在View里展示,一切就这么简单。
  • 上手快,花费一个晚上阅读CodeIgniter手册,基本就可以进行工作了。
  • 很灵活,框架提供了各种类库,能提供很多常用的基本功能,而且我们可以很方便的进行扩展。
  • 体积小,速度快,整个框架核心部分只有5个文件,轻装上阵,当然跑的快^_^

缺点

有吗?有,但是这不会妨碍你喜欢这个框架的理由,框架中提供的类库有些确实简单了点,框架也没有提供像ZendFramework那样的丰富扩展,另外CodeIgniter的缓存做的确实不咋地,不建议使用,如果真的想要缓存,还是建议使用第三方的,比如MemCache,APC等。

所有大部框架一样,CodeIgniter也实现了MVC模型,Model-View-Controller。最重要的就是Conroller,是整个系统的灵魂,所有数据的出入都要通过它来传递,起到了承上启下的作用。

控制器Controller

在CodeIgniter中创建控制器,在application/controllers路径下添加一个Demo.php,并添加下面的代码

  1. <?php
  2. class Demo extends Controller {
  3.  
  4.  function Demo()
  5.  {
  6.   parent::Controller();
  7.  }
  8.  
  9.  function index()
  10.  {
  11.   echo 'Hello world!';
  12.  }
  13. }
  14. ?>

 

现在就可以访问“http://yoururl/index.php/demo/index”,页面将显示”Hello world!”,这里demo为控制器的名字,index为action的名字。在CodeIgniter中,默认Action为”index”,当默认控制器后面没有跟具体的action时,会默认载入‘index’ Action。

当你需要将Controller放置到子目录的时候,例如:application/controllers/admin/demo.php,那麽你访问你该控制器的时候可以这样:http://yoururl/index.php/admin/demo

在controller/下创建一个控制器文件index.php,文件中的代码如下

  1. <?php
  2. class Index extends Controller {
  3.  
  4.  //构造函数
  5.  function Index()
  6.  {  
  7.   parent::Controller();
  8.   $this->load->view('index');
  9.  } 
  10. }
  11. ?>

在application/views路径下添加”index.php”,在里面随便添加一些内容。

访问“http://yoururl/index.php/index/”奇迹出现了,View里的内容重复的输出两次,将代码改为如下就正常了:

  1. <?php
  2. class Index extends Controller {
  3.  
  4.  //构造函数
  5.  function __construct()
  6.  {
  7.   parent::Controller();
  8.  }
  9.  
  10.  //构造函数
  11.  function Index()
  12.  {  
  13.   $this->load->view('index');
  14.  } 
  15. }
  16. ?>

至于导致这种情况的原因,是这样,首先在类实例化时,PHP执行了构造函数,执行了一次load->view,而随后框架调用了默认Action “index”,所以导致了输出两次,按照PHP5的方法将构造函数改为__construct则不会出现这种问题,或者不要把控制器命名为”index”。

小提示:PHP5中保留了对PHP4面向对象的兼容,包括构造函数,这里两个构造函数:Index和__construct,PHP5里会先执行__construct,当__construct不存在时执行Index,而PHP4中不会执行__construct。

Page 1 of 11