在我的codeigniter项目中,我添加了KCK查找程序.
它需要一些由codeigniter控制的会话值.如何从外部文件访问CI会话值?
我正在使用Codeigniter的验证类来验证我的表单.如果发现任何验证错误,您能否告诉我如何从控制器重定向到上一页?
在我的控制器中:
if ($this->form_validation->run() == FALSE){
//**** Here is where I need to redirect
} else {
// code to send data to model...
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含表单的页面,当任何用户提交表单时,数据会转到控制器,控制器会检查验证,如果有任何错误,它会将用户重定向到上一页(包含表单的页面),否则它会将数据发送给模型.
要从控制器重定向到上一页(如果有任何验证错误),我有以下代码
redirect($this->input->post('redirect'));
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但问题是它将用户重定向到上一页(包含表单的页面)后,它没有显示验证错误.
那么请您告诉我如何通过上面发布的"重定向"代码传递验证错误信息并在该页面上显示验证错误消息?
提前致谢 :)
在我的控制器中:
$redirect=$this->input->post('redirect'); // << for this I have- <input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" /> in my view file
$this->session->set_flashdata('errors', validation_errors());
redirect($this->input->post('redirect'));
Run Code Online (Sandbox Code Playgroud)
在我的视图文件中:
<?php
if ($this->session->flashdata('errors')){ //change!
echo "<div class='error'>";
echo $this->session->flashdata('errors');
echo "</div>";
}
?>
Run Code Online (Sandbox Code Playgroud)
因此,我可以通过从控制器重定向到上一页来传递验证错误数据
我在会话中保存了一些数据,并在我的网站中保存了某些点,我给用户提供了根据数组键删除会话的某些部分的选项,我得到的数组,
print_r($this->session->userdata('shortlist'); 这给我留下了以下输出,
Array ( [0] => Array (
[id] => 40
[name] => Namey Name
[location] => location is a place
[talent] => voice over
[image] => ./media/uploads/headshots/width_60_249613_10150280293315435_717615434_9570480_8341358_n.jpg ) );
Run Code Online (Sandbox Code Playgroud)
如何从我的候选名单会话中删除此内容?我尝试过以下操作,但无济于事,
unset($this->session->userdata('shortlist')[0]);
如果我的查询没有返回结果,我怎么能返回'找不到数据'的值?
这是我的代码:
function getTerms($letter) {
$this->db->select('term, definition');
$this->db->from('glossary');
$this->db->where(array('letter' => $letter));
$query = $this->db->get();
foreach ($query->result() as $row) {
$data[] = array(
'term' => $row->term,
'definition' => $row->definition
);
}
return $data;
}
Run Code Online (Sandbox Code Playgroud)
它当前返回$ data变量,即使查询没有返回给我php错误的结果.如何在返回$ data数组之前检查是否有结果.
我有一个具有下一个功能的控制器:
class controller {
function __construct(){
}
function myfunction(){
//here is my variable
$variable="hello"
}
function myotherfunction(){
//in this function I need to get the value $variable
$variable2=$variable
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答.如何将函数的变量传递给codeigniter控制器中的其他函数?
对于不同的条件,我需要在单列上有3种不同的计数.
表结构:
interview-
id-int(10)
c_id-int(10)
experience-varchar2(100)
Run Code Online (Sandbox Code Playgroud)
经验有3个不同的值 - 1)正2)负3)中立
对于c_id = 10的条件,我需要3个不同的"count_positive","count_negative"和"count_neutral"计数.
我知道它可以通过3个不同的查询获得.我可以通过单个查询获得3个计数吗?
我正在尝试在最新版本的CodeIgniter中开始使用sqlite.
我的database.php看起来像这样:
$active_group = 'default';
$active_record = TRUE;
$db ['default'] ['hostname'] ='';
$db ['default'] ['username'] ='';
$db ['default'] ['password'] ='';
$db ['default'] ['database'] = APPPATH. 'db / producers.sqlite';
$db ['default'] ['dbdriver'] = 'sqlite';
$db ['default'] ['dbprefix'] ='';
$db ['default'] ['pconnect'] = TRUE;
$db ['default'] ['db_debug'] = TRUE;
$db ['default'] ['cache_on'] = FALSE;
$db ['default'] ['cachedir'] ='';
$db ['default'] ['char_set'] = 'utf8';
$db ['default'] ['dbcollat??'] = 'utf8_general_ci';
$db ['default'] ['swap_pre'] ='';
$db ['default'] ['autoinit'] = TRUE;
$db ['default'] ['stricton'] = FALSE; …Run Code Online (Sandbox Code Playgroud) 在我的codeigniter控制器函数中,我使用以下代码生成我的视图并插入所有必要的内容:
$left_column = $this->load->view('widgets/sub_navigation', $subnav_data, true);
$left_column .= $this->load->view('widgets/search_box', '', true); //Set data to be loaded into columns
$left_column_base = $this->load->view('widgets/assist_navigation', '', true);
$center_column = 'this is center column';
$right_column = $this->load->view('widgets/ask_us_a_question', '', true);
$right_column .= $this->load->view('widgets/newsletter', '', true);
$right_column .= $this->load->view('widgets/latest_news', '', true);
$this->template->inject_partial('left_column', $left_column); //Inject data into the partial columns
$this->template->inject_partial('left_column_base', $left_column_base);
$this->template->inject_partial('center_column', $center_column);
$this->template->inject_partial('right_column', $right_column);
$this->template->build('template',$data);
Run Code Online (Sandbox Code Playgroud)
我使用的是三列布局,上面的代码指示了每个列中显示的内容.它以非常模块化的方式工作,允许我快速自定义每个页面.
有没有办法简化上面的代码,使用数组可能,减少重复代码,使事情更干?
与传统的面向对象,我会(或可能,而)创建一个模型/对象,它表示一个User,与反映性质,即name,id,job title等
然后我可以创建该对象的新实例并将其分配给变量,如果我循环遍历结果集,我可以为每个创建一个实例.使用codeigniter,这似乎是不可能的,如:
$this->load->model('User');
Run Code Online (Sandbox Code Playgroud)
实例化它,并将其放置在$this->user.
有没有办法以更传统的方式使用模型作为对象?但是没有破解CI的做事方式?
我知道你可以使用东西将事物分配给不同的对象名称$this->load->model('User', 'fubar'),但它不像简单地将实例分配给变量那样动态.
任何洞察此事的人都非常感谢.
编辑:感谢答案的人,我认为我错过了工作"Codigniter方式"的重要部分,但我一直在寻找一个贡献的库,以及使用相同实例(分配给codeigniter命名空间)的做法)但每次使用后清除实例变量似乎是一个很好的工作方式,取消了我的预订.
再一次 - 感谢您的帮助和答案.