懂php mvc开发的进来

jiang_jiajia10 2009-05-25 03:27:40
请教一个技术问题,我在根目录下的model目录下的user.php文件自己写了一个方法get_user_id_by_username($username),那么请问我想在根目录avatar.php文件内使用这个方法,应该怎样正确的使用呢?我写的代码如下:
$uid= $_ENV['user']->get_user_id_by_username($username);
程序似乎没有正常的运行,估计是错误了。请问我该怎么引用呢?
...全文
351 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
chr28 2010-08-02
  • 打赏
  • 举报
回复
技术贴,看一下
fxs_2008 2009-05-25
  • 打赏
  • 举报
回复
看了一下

首先,它的控制器类和模型类均是继承自model下的base类

且base,有load方法,加载模型类,下面是base类中的方法

/**
* 加载相应的 Model, 存入 $_ENV 超级全局变量
*
* @param string $model 模块名称
* @param 该模块相对的基类 $base 默认为该基类
* @return 此处不需要返回
*/
function load($model, $base = NULL) {
$base = $base ? $base : $this;
if(empty($_ENV[$model])) {
require_once UC_ROOT."./model/$model.php";
eval('$_ENV[$model] = new '.$model.'model($base);');
}
return $_ENV[$model];
}


问题在于,能否在其他地方调用:

个人看法是调用问题多:
首先,在框架中,一般的模型类方法只能控制器中调用,如果你在控制器中写方法,是可以的,因为均继承自base
你可以在控制器中如:user.php加载 ,$this->load('user');就可以用它的方法了 ,一般为$this->uer->get_user_id_by_username($username);

第二个:在根目录文件中能否调用,个人觉得在uchome调用可能不行?因为它不是控制器中!
控制器在uc_client中controller中

如果强制调用,要么引用base类,要么改模型类中的$base 参数,可行度不大

第三个,可以看看UChome是如何利用控制器的,按照它的方法用!


Kepin_moo 2009-05-25
  • 打赏
  • 举报
回复
mvc 是嘛东西啊?
jichangh1983 2009-05-25
  • 打赏
  • 举报
回复
关注
fxs_2008 2009-05-25
  • 打赏
  • 举报
回复
$user = $_ENV['user']->get_user_by_uid($fromuid);

在哪个页
jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fxs_2008 的回复:]
&$base,它这个是引用的基类,应该也是已实例化的

你看一下别的程序段引用user类时传的是什么进去的
[/Quote]
$user = $_ENV['user']->get_user_by_uid($fromuid);
fxs_2008 2009-05-25
  • 打赏
  • 举报
回复
&$base,它这个是引用的基类,应该也是已实例化的

你看一下别的程序段引用user类时传的是什么进去的
foolbirdflyfirst 2009-05-25
  • 打赏
  • 举报
回复
根据名字来看,估计是uchome定义的基类,class base{..}这样的东西,你应该去看看api文档,或者找找usermodel里的其它方法是怎么调用的。
fxs_2008 2009-05-25
  • 打赏
  • 举报
回复
&$base引用的可能是基本类


你找下,或在调用usermodel 的网页里输出一下看看&base是什么,在什么时候传入的
jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 foolbirdflyfirst 的回复:]
不好用是因为你
require UC_ROOT.'model/user.php'
这句没引用到类文件呢,还是有什么错误?
而且usermode类里的构造函数也是必须有参数的,你似乎实例化的时候没传进来。


PHP code!defined('IN_UC') && exit('Access Denied');

class usermodel {

var $db;
var $base;

function __construct(&$base) {//$base参数,包含一个db的实例化对象
$this->usermodel($base);
}


[/Quote]
文件引进来了,但是不知道该传什么参数呢?
foolbirdflyfirst 2009-05-25
  • 打赏
  • 举报
回复
$users = new usermodel($base); //既然实例化了,这里必须传一个$base参数,至于$base是什么样的一个对象,只能lz自己去看看了
//$uid= $this->$users->get_user_id_by_username($username); //$this->$users是为何?
$users->get_user_id_by_username($username);//这样调用不行?
foolbirdflyfirst 2009-05-25
  • 打赏
  • 举报
回复
不好用是因为你
require UC_ROOT.'model/user.php'
这句没引用到类文件呢,还是有什么错误?
而且usermode类里的构造函数也是必须有参数的,你似乎实例化的时候没传进来。

!defined('IN_UC') && exit('Access Denied');

class usermodel {

var $db;
var $base;

function __construct(&$base) {//$base参数,包含一个db的实例化对象
$this->usermodel($base);
}

function usermodel(&$base) {//$base参数,包含一个db的实例化对象
$this->base = $base;
$this->db = $base->db;
}
...


jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 foolbirdflyfirst 的回复:]
没接触过uchome。有点疑问

PHP code$users = new usermodel(); //既然实例化了
//$uid= $this->$users->get_user_id_by_username($username); //$this->$users是为何?
$users->get_user_id_by_username($username);//这样调用不行?
[/Quote]
我这样用过不好用
foolbirdflyfirst 2009-05-25
  • 打赏
  • 举报
回复
没接触过uchome。有点疑问
$users = new usermodel(); //既然实例化了
//$uid= $this->$users->get_user_id_by_username($username); //$this->$users是为何?
$users->get_user_id_by_username($username);//这样调用不行?
jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fxs_2008 的回复:]
不知uchome是自已的框架还是用的别的?
[/Quote]
就是他uchome的框架
fxs_2008 2009-05-25
  • 打赏
  • 举报
回复
不知uchome是自已的框架还是用的别的?
jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复
//下面是调用的方法
function get_avatars($username, $size = 'middle', $type = '') {
$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
//下面是引用方法的代码
require UC_ROOT.'model/user.php';
//include_once('model/user.php');
$users = new usermodel();
//$uid= $this->$users->get_user_id_by_username($username);
$uid = 1;
$uid = abs(intval($uid));
$uid = sprintf("%09d", $uid);
$dir1 = substr($uid, 0, 3);
$dir2 = substr($uid, 3, 2);
$dir3 = substr($uid, 5, 2);
$typeadd = $type == 'real' ? '_real' : '';
return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg";
}

jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复

<?php

/*
[UCenter] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms

$Id: avatar.php 910 2008-12-30 03:51:44Z monkey $
*/
error_reporting(0);
define('IN_UC', TRUE);
define('UC_ROOT', substr(__FILE__, 0, -9));
define('UC_API', strtolower((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
define('UC_DATADIR', UC_ROOT.'data/');
define('UC_DATAURL', UC_API.'/data');
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

$uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
$username = isset($_GET['username'])? $_GET['username'] : '';
$size = isset($_GET['size']) ? $_GET['size'] : '';
$random = isset($_GET['random']) ? $_GET['random'] : '';
$type = isset($_GET['type']) ? $_GET['type'] : '';
$check = isset($_GET['check_file_exists']) ? $_GET['check_file_exists'] : '';
if (!empty($uid)) {
$avatar = './data/avatar/'.get_avatar($uid, $size, $type);
}else {
$avatar = './data/avatar/'.get_avatars($username, $size, $type);
}
if(file_exists(dirname(__FILE__).'/'.$avatar)) {
if($check) {
echo 1;
exit;
}
$random = !empty($random) ? rand(1000, 9999) : '';
$avatar_url = empty($random) ? $avatar : $avatar.'?random='.$random;
} else {
if($check) {
echo 0;
exit;
}
$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
$avatar_url = 'images/noavatar_'.$size.'.gif';
}

if(empty($random)) {
header("HTTP/1.1 301 Moved Permanently");
header("Last-Modified:".date('r'));
header("Expires: ".date('r', time() + 86400));
}

header('Location: '.UC_API.'/'.$avatar_url);
exit;

//下面是调用的方法
function get_avatars($username, $size = 'middle', $type = '') {
$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
require UC_ROOT.'model/user.php';
//include_once('model/user.php');
$users = new usermodel();
//$uid= $this->$users->get_user_id_by_username($username);
$uid = 1;
$uid = abs(intval($uid));
$uid = sprintf("%09d", $uid);
$dir1 = substr($uid, 0, 3);
$dir2 = substr($uid, 3, 2);
$dir3 = substr($uid, 5, 2);
$typeadd = $type == 'real' ? '_real' : '';
return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg";
}

?>
jiang_jiajia10 2009-05-25
  • 打赏
  • 举报
回复

<?php

/*
[UCenter] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms

$Id: user.php 879 2008-12-15 03:28:36Z zhaoxiongfei $
*/

!defined('IN_UC') && exit('Access Denied');

class usermodel {

var $db;
var $base;

function __construct(&$base) {
$this->usermodel($base);
}

function usermodel(&$base) {
$this->base = $base;
$this->db = $base->db;
}

function get_user_by_uid($uid) {
$arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
return $arr;
}

function get_user_by_username($username) {
$arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
return $arr;
}
//这里是我添加的方法
function get_user_id_by_username($username){
$uid = $this->db->result_first("SELECT uid FROM uchome_space WHERE username='$username'");
return $uid;
}

function check_username($username) {
$guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
$len = strlen($username);
if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
return FALSE;
} else {
return TRUE;
}
}

function check_mergeuser($username) {
$data = $this->db->result_first("SELECT count(*) FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->base->app['appid']."' AND username='$username'");
return $data;
}

function check_usernamecensor($username) {
$_CACHE['badwords'] = $this->base->cache('badwords');
$censorusername = $this->base->get_setting('censorusername');
$censorusername = $censorusername['censorusername'];
$censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censorusername = trim($censorusername)), '/')).')$/i';
$usernamereplaced = isset($_CACHE['badwords']['findpattern']) && !empty($_CACHE['badwords']['findpattern']) ? @preg_replace($_CACHE['badwords']['findpattern'], $_CACHE['badwords']['replace'], $username) : $username;
if(($usernamereplaced != $username) || ($censorusername && preg_match($censorexp, $username))) {
return FALSE;
} else {
return TRUE;
}
}

function delete_user($uidsarr) {
$uidsarr = (array)$uidsarr;
$uids = $this->base->implode($uidsarr);
$arr = $this->db->fetch_all("SELECT uid FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid IN ($uids)");
$puids = array();
foreach((array)$arr as $member) {
$puids[] = $member['uid'];
}
$uids = $this->base->implode(array_diff($uidsarr, $puids));
if($uids) {
$this->db->query("DELETE FROM ".UC_DBTABLEPRE."members WHERE uid IN($uids)");
$this->db->query("DELETE FROM ".UC_DBTABLEPRE."memberfields WHERE uid IN($uids)");
$this->delete_useravatar($uidsarr);
$this->base->load('note');
$_ENV['note']->add('deleteuser', "ids=$uids");
return $this->db->affected_rows();
} else {
return 0;
}
}

function delete_useravatar($uidsarr) {
$uidsarr = (array)$uidsarr;
foreach((array)$uidsarr as $uid) {
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big', 'real')) && unlink($avatar_file);
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle', 'real')) && unlink($avatar_file);
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small', 'real')) && unlink($avatar_file);
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big')) && unlink($avatar_file);
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle')) && unlink($avatar_file);
file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small')) && unlink($avatar_file);
}
}

function get_total_num($sqladd = '') {
$data = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."members $sqladd");
return $data;
}

function get_list($page, $ppp, $totalnum, $sqladd) {
$start = $this->base->page_get_start($page, $ppp, $totalnum);
$data = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."members $sqladd LIMIT $start, $ppp");
return $data;
}

function name2id($usernamesarr) {
$usernamesarr = daddslashes($usernamesarr, 1, TRUE);
$usernames = $this->base->implode($usernamesarr);
$query = $this->db->query("SELECT uid FROM ".UC_DBTABLEPRE."members WHERE username IN($usernames)");
$arr = array();
while($user = $this->db->fetch_array($query)) {
$arr[] = $user['uid'];
}
return $arr;
}

function quescrypt($questionid, $answer) {
return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';
}

}

?>
TR@SOE 2009-05-25
  • 打赏
  • 举报
回复
没有context,不知道怎么帮……
加载更多回复(7)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧