作者tao2tw (smile_ting)
看板PHP
标题[讨论] 登入验证 on Codeigniter CI
时间Sun Aug 26 00:28:08 2012
趁着我的网站还没大到难以控制的阶段,
这礼拜下定决心要跳到CI
只是很多传统观念 还是转不太过来。
现在要把首页搬到新的架构 头就有点乱了。
下面网址是简单图文解说我在ci上的新设计
虽然都是写英文,但是有尽量用简单流程图 解释架构概念
(如果有建议的地方 烦请指正)
http://tinyurl.com/8cuzykg
另外请问一下,我的原本网站有需要很多处理订单的task
通常我可能就是 order.php ==(中间穿插 js 验证) ==> order_process.php
order.php
会去抓User info(从mysql) , 自动带入一些讯息
order_process.php
会去抓User Info
并且把订单资料 insert into database
顺便利用 zend framwork library 把资料丢到google docs
这部份如果要转到CI的话目前头有点痛
大致想到架构就是, create new controller "Order"
在Order里面有两个function : submit() , process()
就在这两个function 里面 把之前做的工作都丢进来
process() 这边没有什麽view 需要display 出来。
但像是原本 php 我有写很多 自定的 function 比如说 (common.php)
所以在我的process()里面可能也会充斥着
require_once "common.php"
require XXX
这类型的code
整理出来的pseudo code 大致如下
submit()
{
//在FORM_VIEW里面有些input 栏位,要带入User data (从DB捞出来的)
DATA = model->getUserData();
load->view(FORM_VIEW,DATA);
//在FORM_VIEW, action=order/process/
//还没试过 但是我猜应该会自动把 $_POST 变数传到
//process() function?
}
process()
{
//就是会有一堆requre (是否会不符CI精神?有更好作法?)
require(PHPMAILER);
require(ZEND_FRAMWORK);
require(XXXX);
$get_data = $_POST;
model->setUserData();
mail->send();
}
目前还没开始 implement,
只是想起来 这个 Order controller 可能也会长的很肥大。
不知道有没有误用了 CI , 或者有比较好的设计方法呢?
================================================
[更新如下]
我的网站架构如下
ci_www/
├── application
├── assets
├── css
├── files
├── images
├── inc
└── javascripts
├── sys
└── system
请问一下如何设计验证表单
现在我的架构下有两个 controller
(1) index
(2) order
一旦进入首页,就会trigger index->entry();
这个function , 主要会先 "验证登入状态" , 再决定要不要 载入view
传统的架构我想就是一般在 index.php
里面的header require很多有关 validation php files
如果验证正确,显示页面。
验证失败,可能redirect,或者exit
但是这是传统的架构。
转换到CI上面目前我的设计如下,
进入entry()
先呼叫 $this->getUserFromDb() ; 回传值到 $data
在把 $data 传入 index_view
在index_view里面判断是否要 display view ,
遇到问题如下,$this->getUserFromDb() ;
其实还没有把功能写完,但是写完感觉,
在index 这个controller 看起来又是一堆if else 肥肥大大的判断式。
public function entry() //这个function 用来显示页面内容
{
$data = $this->getUserFromDb() ;
$this->load->view('index_view',$data);
}
function getUserFromDb()
{
if(isset($_POST) AND !empty($_POST) AND $_POST['username'] ) //代表有登入
{
if( !$_POST['username'] || !$_POST['password'] )
{
return "fail";
}
elseif( $_POST['username'] AND $_POST['password'] )
{
$id = $_POST['username'];
$mobile = $_POST['password'];
$this->db->where('id' , $id);
$this->db->where('mobile' , $mobile);
$query = $this->db->get('test_member');
foreach ($query->result() as $row)
{
echo $row->id."\n";
}
return "ok";
}
else{
$err[] = '请务必填写完整帐号或者密码!!';
return "fail";
}
}else
{
return "";
}
}
在这边是否适合写一个function 在 assets/inc/check_login.php
然後我在require assets/inc/check_login.php
因为像是这种判断function,
我可能在controller:order 这边也需要去 require进来做判断。
在CI的惯例,一个controller , 会去呼叫另外一个controller 写好的function吗?
如果不太好,怎麽样的写法会比较好呢?
谢谢
http://tinyurl.com/8cuzykg
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 119.77.136.156
※ 编辑: tao2tw 来自: 119.77.136.156 (08/26 00:40)
1F:→ superpai:做成自己的helper或是library然後用ci的$this->load-> 08/26 11:03
※ 编辑: tao2tw 来自: 119.77.136.156 (08/26 13:25)
2F:→ marcoyan:我个人是习惯把controller当moudles来思考,所以如果是像 03/20 22:43
3F:→ marcoyan:这种登入的我可能就放在member.php这只controller里处理 03/20 22:43
4F:→ marcoyan:然後其它controller有需要调用到我再引入member的model 03/20 22:44