我正在使用Codeigniter 2.0的最新副本构建应用程序.我的应用程序是动态的,有点像我想你可以说的自定义CMS.我有一个名为'settings'的数据库表,其中包含以下字段:
基本上我目前正在做的是使用辅助函数从我的设置表中检索特定设置,如站点名称或当前主题.但是我开始认为在数据库中可能有一定数量的数据库调用来检索设置.
有没有办法从数据库中检索我的应用程序的设置,然后将它们附加到我的配置文件?我注意到Mojomotor做了类似的事情,它是一个CI 2.0应用程序,但我宁愿这是最简单,最简单的代码.
如果数据库中的设置已更改并更新配置文件,我最好能够经常检查.数据库上的压力越小越好.
我正在接管一个项目,并正在尝试为 CodeIgniter 编写一些测试,以便在命令行上通过持续集成运行,而且关于使用 CodeIgniter 进行测试的在线文档似乎很少,并且让测试为控制器运行似乎特别困难。
之前有一些答案建议使用 FooStack,但 FooStack 是我所能收集到的最好的 CodeIgniter 1.x。
我现在不是在考虑在整个站点上运行 selenium。有没有人设法用 CodeIgniter 测试控制器?
相关回答:
我想知道CodeIgniter的自动加载的最佳实践是什么.仅仅自动加载我可能需要的所有东西是不好的做法,还是可以这样做?这会给应用程序带来更多负担吗?
目前我只是自动加载我将在整个应用程序中使用的库和帮助程序:
$autoload['libraries'] = array('database', 'session', 'parser');
$autoload['helper'] = array('url', 'form');
所以我基本上想知道这是否"好",或者我是否应该在我实际使用它们时加载其中一些(如表单助手:只在我实际构建时才加载它)页面上的表格).
也许我在这里有点过于偏执,但是在阅读了很多关于'Ruby方式'之后,我想知道是否有CodeIgniter方式.提前致谢!
我想在CodeIgniter应用程序中使用jQuery提交表单.但是,Controller中调用的函数一直希望将用户发送到不存在的页面(与Controller函数同名).
我试过这个:
$('#contactForm').submit(function () {
});
Run Code Online (Sandbox Code Playgroud)
还有这个:
$('#contactForm').submit(function () {
dataString = $("#contactForm").serialize();
$.ajax({
type:"POST",
url:"<?php echo base_url(); ?>about/contactSubmit",
data:dataString,
success:function (data) {
alert('test');
}
});
return false; //stop the actual form post !important!
});
Run Code Online (Sandbox Code Playgroud)
表单是一个id为"contactForm"的简单表单.jQuery提交函数的工作原理是它转到Controller中的"contactSubmit"函数.这个函数看起来像这样:
public function contactSubmit()
{
$this->load->model('customer_model');
$this->customer_model->addCustomer();
}
Run Code Online (Sandbox Code Playgroud)
因此它在Model中调用addCustomer函数,该函数在数据库中添加信息.一切正常.但后来它试图打开一个不存在的"customerSubmit"页面,这就是我想要避免的.我只是希望它保持在同一页面上,它有一个jQuery函数,用于告诉用户表单已经提交好了.
那我该怎么做?
编辑:
似乎未通过Controller函数contactSubmit发送到新页面的关键是在提交jQuery函数中返回false,从我可以找到的主题的每个教程判断,但是...当我包括它时,控制器根本没有调用函数.这意味着只有上面的第一个选项真正调用Controller函数(即.submit而不返回false).
那么我在这里做错了什么?如果我应该使用提交将数据传递到数据库,但是"return false"会阻止它实际调用Controller中的函数吗?
编辑2:找到答案,看看我对Christophs帖子的评论!
我想通过电子邮件类在codeigniter中使用gmail发送电子邮件,但是我收到以下错误:
错误:
遇到PHP错误
严重性:警告
消息:mail()[function.mail]:无法连接到"ssl://smtp.googlemail.com"端口25的邮件服务器,验证您的"SMTP"和"smtp_port"设置php.ini或使用ini_set()
文件名:libraries/Email.php
行号:1553
这是我在controll中的全部功能:
function send_mail(){
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_port'] = 465;
$config['smtp_user'] = 'xyz@gmail.com';
$config['smtp_pass'] = 'xxxxxxx';
$this->load->library('email', $config);
$this->email->set_newline("\r\n");
$this->email->from('neginph@gmail.com', 'Negin Phosphate Shomal');
$this->email->to('neginfos@yahoo.com');
$this->email->subject('This is an email test');
$this->email->message('It is working. Great!');
if($this->email->send())
{
echo 'Your email was sent, successfully.';
}
else
{
show_error($this->email->print_debugger());
}
}
Run Code Online (Sandbox Code Playgroud)
我在php.ini这里更改了SMTP :
SMTP = ssl://smtp.googlemail.com
smtp_port = 25
我该怎么办?
尊重地
请参阅以下链接结构
http://stackoverflow.com/questions/10672712/voting-system-like-stackoverflow
Run Code Online (Sandbox Code Playgroud)
在上面的链接中,10672712我猜是问题ID,因为如果您检查以下链接,您将到达上面相同的位置:
http://stackoverflow.com/questions/10672712
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用上述链接,那么您会注意到在浏览器的地址栏中链接会自动在问题ID后面添加问题标题(作为slug),它就像上面的第一个链接一样.
我正在尝试使用Codeigniter创建基于文章的网站.为了显示特定的文章,我有一个控制器,如下所示:
function articles(){
$id=$this->uri->segment(3);
$this->load->model('mod_articles');
$data['records']=$this->mod_articles->list_articles($id);
$this->load->view('view_article',$data);
}
Run Code Online (Sandbox Code Playgroud)
我的型号:
function list_articles($id)
$this->db->select('*');
$this->db->from('cx_article');
$this->db->join('cx_author', 'cx_author.author_id = cx_article.author_id');
$this->db->where('article_id', $id);
$query = $this->db->get();
if ($query->num_rows() > 0)
{ return $query->row_array();
}
else {return NULL;}
}
Run Code Online (Sandbox Code Playgroud)
如果你点击这个 - > localhost/my_base_url/my_controller/my_funtion/article_id然后我的文章出现了.现在我想要实现的是如果有人点击localhost/my_base_url/my_controller/my_funtion/article_id我想在article_id之后自动添加文章标题为slug.(就像我上面给出的例子)
你能告诉我怎么做吗?
谢谢:)
PS在我的数据库表中,我有一个名为的列article_slug,其中我将我的文章标题存储为slug(例如:voting-system-like-stackoverflow).
我用控制器创建了我的网站,例如about,products等...这给了我example.com/about/等.
如何创建具有相同控制器名称的管理部分,例如example.com/admin/about或example.com/admin/products?
如何组织我的控制器?
我在我的购物车项目中使用codeigniter购物车类.我的购物车上有多少件物品.现在我确实有购物车行ID.现在我需要做的是,需要从购物车中删除特定商品而不是所有内容(销毁购物车).
$cartcontents = $this->cart->product_options($rowid);
Run Code Online (Sandbox Code Playgroud)
并取消所有内容.但没有成功.请帮助你任何人有一个想法.谢谢.
这是我的自定义验证功能.它使用Google Maps CodeIgniter库中的地理编码来检查某个位置是否存在.
public function address_check($str)
{
$this->load->library('GMap');
$this->gmap->GoogleMapAPI();
// this method checks the cache and returns the cached response if available
$geocodes = $this->gmap->getGeoCode("{$str}, United States");
$this->form_validation->set_message('address_check', 'The %s field contains an invalid address');
if (empty($geocodes))
{
return FALSE;
}
else
{
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将上面的函数与上面的规则一起放在我的控制器中,它可以很好地工作.
$this->load->library('form_validation');
$this->form_validation->set_rules('location', 'Location', 'callback_address_check');
Run Code Online (Sandbox Code Playgroud)
现在我只想将它从我的Controller中移出.因此,我正在尝试根据此SO答案和CI文档扩展我的CodeIgniter表单验证库.
我在这里创建了一个文件 /codeigniter/application/libraries/MY_Form_validation.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
public function __construct() …Run Code Online (Sandbox Code Playgroud) 我使用活动记录运行CodeIgniter.下面是我的表格结构:
id (int) user (int) is_complete (tinyint)
------------------------------------------------
1 24 1
2 24 1
3 24 NULL
4 24 0
5 24 0
Run Code Online (Sandbox Code Playgroud)
$this->db->where('user', 24);
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT * FROM `table` WHERE `user` = 24
Run Code Online (Sandbox Code Playgroud)
工程和退货:
id user is_complete
--------------------------
1 24 1
2 24 1
3 24 NULL
4 24 0
5 24 0
Run Code Online (Sandbox Code Playgroud)
$this->db->where('user', 24);
$this->db->where('is_complete', 1);
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` = 1
Run Code Online (Sandbox Code Playgroud)
工程和退货:
id user is_complete
-------------------------- …Run Code Online (Sandbox Code Playgroud) codeigniter-2 ×10
codeigniter ×8
php ×5
autoload ×1
cart ×1
database ×1
email ×1
form-submit ×1
gmail ×1
jquery ×1
mysql ×1
unit-testing ×1
validation ×1