所以我正在创建一个网络应用程序,它有这个上传表单,你可以上传android APK,这部分上传表单专门用于上传旧版APK的修订版(换句话说是新版本的应用程序)。
所以我使用CodeIgniter 2.x在PHP中完成所有这些工作 由于用户正在上传新版本的旧应用程序,我希望网站确保用户为这个旧应用程序上传的应用程序具有相同的包名称(Android包文件名),例如com.example.something
启动文件上传时,解析文件并将包名放入数据库,并将随机生成的此文件的哈希值存储在会话数据中作为“new_app_hash”,旧文件的随机哈希值为在名为“app_id”的隐藏输入字段中。
现在来看代码: 我的控制器有这个用来为app_id做回调的事情,并将它的信息与会话中的'new_app_hash'进行比较。 因此,这个回调主要用于获取我的数据库表中散列为'app_id'和'new_app_hash'的行信息,然后比较包名称。
$app_id = $this->input->post('app_id',TRUE);
if($app_id!='0'){ //only if app_id is not 0, else I dont want this to happen
$this->form_validation->set_rules('app_id','New Package','required|callback_packagerevname');
}
回调中使用的模型函数:
public function check_checkpackagerevname($app_id,$sessionhash){
if($app_id!='0'){
$old_package = $this->getPackageInfo($app_id);
$new_package = $this->getPackageInfo($sessionhash);
if($old_package['package_name']==$new_package['package_name']){
///ok fine they are same, return true.
return TRUE;
}else{
return FALSE;
}
}else{
return TRUE;
}
}
GetPackageInfo():
public function getPackageInfo($hash){
$this->db->select('*');
$this->db->from('appstore_packages');
$this->db->where('hash',$hash);
$query = $this->db->get();
return $query->row_array();
}
我的回调如下:
function callback_packagerevname($app_id){
$sessionAppHash = $this->session->userdata('new_hash_app');
$checking = $this->storeM->check_checkpackagerevname($app_id,$sessionAppHash);
if($checking==TRUE){
return TRUE;
}else{
$this->form_validation->set_message('packagerevname','The uploaded APK must have same package name as the parent app that you are trying to upload.');
return FALSE; ////// new apk doesnt have same package name.
}
}
我已经尝试检查form_validation规则是否正常工作,当我添加其他类型的规则(如greater_than [0]时它确实显示错误,但回调在提交表单时不起作用,尽管回调函数似乎工作正常,当我直接从URL访问它,在会话中设置'new_app_hash'并将app_id放入URL时,它会相应地返回true或false。
可能有什么不对?
P.S如果问题有点令人困惑请评论,我正在连续12个小时的项目工作,所以我知道的有点儿。 :P编辑:好吧,似乎12个小时真的让我感觉到了。 感谢praveen,我错误地命名了回调方法, 而不是:
function callback_packagerevname($app_id){
}
显然应该是:
function packagerevname($app_id){
}
答案 0 :(得分:2)
您不需要callback_functionname
作为回调事件,只需删除callback_
即可正常工作......
function packagerevname()
{
$app_id = $this->input->post('app_id');
//so on....
}
答案 1 :(得分:0)
您可以使用设置闪存数据
/* $this->form_validation->set_message('checkpackagerevname',
'The uploaded APK must have same package name as the parent app that you are trying to upload.'); */
$this->session->set_flashdata('checkpackagerevname',
'The uploaded APK must have same package name as the parent app that you are trying to upload.');
并且可以打印
echo $this->session->flashdata('checkpackagerevname');
更多访问 https://ellislab.com/codeigniter/user-guide/libraries/sessions.html