如何设置CI2以允许扩展多个模型?
我只能扩展一个名为MY_Model的模型(放入/ application/core)(区分大小写).
选择我正在做的扩展模型; 在模型中..
require_once APPPATH.'core/MY_Another_model.php';
class Test_model extends MY_Another_model {
...
}
Run Code Online (Sandbox Code Playgroud)
我无法在核心系统代码中找到它所声明的位置,只允许将被扩展的模型称为MY_Model.
感谢您的帮助.
我正在为我的网站搜索轻量级和交叉浏览器兼容的解决方案.这是我成功实施的解决方案:
代码:http: //www.jamipietila.fi/codeigniter-and-autocomplete-with-jquery/ 工作示例:http: //demosivut.net/demo/ci_jquery_autocomplete/index.php/autocomplete
但是使用jquery.ui为js文件花费200 kb,为css文件花费另外33 kb.
我计划在每个页面中实现自动完成框,而且似乎只需要一个自动完成框就会花费很多.
这是一个较小的解决方案吗?
表单验证库似乎只适用于POST.我需要使用查询字符串,并希望使用CI来验证传递的值.有没有办法做到这一点?
当我尝试从我的数据库中检索数据到表时,我收到此错误:
DataTables warning (table id = 'student_table'): Requested unknown
parameter '1' from the data source for row 0
Run Code Online (Sandbox Code Playgroud)
下面是我使用的javascript
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
$('#student_table').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sServerMethod": "POST",
"sAjaxSource": "<?php echo base_url()?>index.php/data/all"
} );
} );
</script>
Run Code Online (Sandbox Code Playgroud)
检索到的JSON数据:
{"sEcho":0,"iTotalRecords":3,
"iTotalDisplayRecords":3,
"aaData":[["85","t1","1D"],["74","test475","4A"],
["777","maiz","5"]],"sColumns":"id,name,class"}
Run Code Online (Sandbox Code Playgroud)
以下是我的表格:
<table class="datatable tables" id="student_table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Class</th>
</tr>
</thead>
<tbody>
<tr>
<td class="dataTables_empty">Loading data from server</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
PHP代码(点燃数据表)
$this->load->library('datatables');
$this->datatables->select('admission,name,class');
$this->datatables->from('students');
echo $this->datatables->generate();
Run Code Online (Sandbox Code Playgroud)
我正在使用codeigniter和DataTables.
为什么我会收到该错误以及如何将数据检索到表中?
<? if ( ! defined('BASEPATH')) exit();
class Registration extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('registration_model');
}
public function index() {
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'E-mail', 'trim|required|valid_email|callback_email_available');
if($this->form_validation->run() == FALSE) {
$this->load->view('registration');
} else {
$this->registration_model->add_user();
}
}
# Check E-mail
public function email_available($email) {
$this->db->select('email');
$this->db->where('email', $email);
$query = $this->db->get('users');
$result = $query->row();
if(!empty($result)) {
$this->form_validation->set_message('email_available', 'This e-mail belongs to another user.');
return FALSE;
} else {
return TRUE;
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我有一份表格验证的注册表格.我有一个回调函数来验证电子邮件的唯一性.
所有代码都可以正常工作,但我可以直接访问带有错误的回调函数
examle.com/registration/email_available
A PHP Error was …Run Code Online (Sandbox Code Playgroud) 我的申请表上有注册表.当有人完成注册时,会收到一封电子邮件,其中包含确认注册的链接(典型情况).
链接是这样的
编码用户名:
$encrypted_username = $this->encrypt->encode($username);
Run Code Online (Sandbox Code Playgroud)
但是,访问该链接会返回以下错误
所提交的网址带有不被接受的字符.
设置$config['permitted_uri_chars'] = '';一切顺利,但他们说我们不应该这样做.
那么,我该如何解决这个问题呢?
所以......我把一些代码住一天(即工作我的本地机器上100%的罚款),但杀了服务器-没有笨日志,没有Apache日志,die('msg')并exit()没有工作-我从来没有在之前经历过5+多年的PHP开发.
在50多次提交到我的回购之后,我将问题缩小到一个声明,该声明在拆分时有效,但不能在一起.
系统信息:
PHP版本:5.4.13
Codeigniter版本:
define('CI_VERSION', '2.1.3');
这些行有效(在Codeigniter MY_Controller函数中调用):
dump($this->get_val('order_id'));
$tmp = $this->get_val('order_id');
dump($tmp);
dump(empty($tmp));
dump(!empty($tmp));
Run Code Online (Sandbox Code Playgroud)
但是当我添加以下行时,会发生上述崩溃:
!empty($this->get_val('order_id'))
Run Code Online (Sandbox Code Playgroud)
这似乎是一个PHP错误?
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Main extends Administration {
function index() {
// if (!empty($in['order_id'])) { /* BROKEN */
dump($this->get_val('order_id'));
$tmp = $this->get_val('order_id');
dump($tmp);
dump(empty($tmp));
dump(!empty($tmp));
// dump(!empty($this->get_val('order_id'))); /* BROKEN */
// if (!empty($this->get_val('order_id'))) { /* BROKEN */
// dump(true);
// } else {
// dump(false);
// }
}
}
Run Code Online (Sandbox Code Playgroud)
我按照Phil的Sturgeon 示例创建了两个控制器,Public_Controller和./application/libraries文件夹中的Admin_Controller .
我想要做的是特定地自动加载Public_Controller和Admin_Controller,所以我在./application/config.php中创建了这个自动加载功能.
function __autoload($class) {
// Autoload only Public_Controller and Admin_Controller
if (strpos($class, 'CI_') !== 0) {
$file = APPPATH . 'libraries/'. $class .'.php';
if ( file_exists($file) && is_file($file) ) {
@include_once($file);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个问题是我有更多的文件包含在库文件夹中,所以那些也是自动加载的,这不是我想要的.所以我尝试对第一个if语句进行一些小改动,如下所示:
if ( in_array($class, array('Public_Controller, Admin_Controller')) ) // instead of strpos
Run Code Online (Sandbox Code Playgroud)
为了只针对这两个类,但这似乎不起作用.我可能做错了什么想法?
我和一位朋友刚刚开始参与一个项目,其他人几年前就停止了开发,我们正试图复活它.我们已经解决了大多数与设置相关的问题,但是我们无法弄清楚这是一个非常烦人的问题.
在我们的本地主机中,所有页面都需要很多时间来加载/刷新.我不是指资产,脚本或任何东西,问题是在第一个请求完成之前的延迟.大多数情况下需要15到30秒,这是不可接受的,有时甚至会达到1或2分钟.
例如,这是Chrome开发工具中"网络"标签的屏幕截图.第一行是视图,其他是资产.

我们用谷歌搜索了几个小时,尝试了一些不同的东西,但没有一个有效.像这样的一些解决方案指向一些Apache的httpd.conf设置,但我放弃了,因为我使用相同的服务器用于其他项目,这从未发生过(无论如何我试过了,但是没有用).其他人指出PHP版本冲突,所以我尝试将我的MAMP中的PHP从5.4.10更改为5.2.17(该项目需要5.2.3+),但这似乎也不起作用.
除了我的MAMP安装,我们还在带有WAMP(PHP5.5)的Windows机器上测试了它,并且在另一台带有干净MAMP(PHP5.5)的Mac上进行了测试,在这两种环境中都会发生同样的事情.所以,我们现在想知道问题是否可能出现在CodeIgniter本身(这听起来不太可能)或某些项目配置中,但我们对CodeIgniter(也不是PHP专家)都是新手,并且找不到任何东西.
哦,我们也尝试联系原始的开发人员,但是他们说这是两年前,听起来他们不愿意提供帮助.我真的希望他们在开发这个项目的时候没有这个问题,因为在30秒的加载时间内工作它只是疯了.
有人有任何想法或了解我们可以尝试找到问题的更多内容吗?如果需要,我可以发布一些代码.
更新:我刚刚发现这个未解决的问题,其中用户遇到了与Laravel类似的问题,但有时只是.正如我所说,在我的情况下,这种情况总是发生,延迟时间从大约10秒到几分钟.
更新2:正如Wrikken所建议的,我通过xdebug探查器运行它,但我不确定如何解释结果以查看问题所在.我用PHPStorm的"Analyze Xdebug Profiler"工具打开了一个快照,并按照每个调用中使用的时间对其进行了排序.以下是一些截图:

并按自己的时间排序:

这CashewModel显示一些排队是某种自定义库由以前的开发者,这也是造成我们已经解决了一些问题建.我希望问题不会隐藏在那里,因为我不知道大多数自定义代码是如何工作的.
有任何想法吗?同样,我可以根据需要发布代码.
更新3:深入研究代码,MY_Controller在上面的屏幕截图中,以前的开发人员创建了一些扩展的自定义控制器CI_Controller.我刚刚发现他们将所有腰果代码推送到GitHub,这是MY_Controller文件.
我还会在这里粘贴第467行的所有相关代码(在GitHub的版本中是464),它涉及_remap内部的功能,CashewController并且是探查器说所有时间花费的地方.我将一些评论和名称翻译成英文.
/**
*
* Extension of the default controller, adding support for templates
*
* Usage example:
*
* class Dummy extends EC_Controller
* {
* public function index()
* {
* $this->add_section('id_in_template', 'page_name');
* $this->render_page(); // Renders the default …Run Code Online (Sandbox Code Playgroud) 如何使用CodeIgniter打印在收到的请求的标题中设置的值?
我试过print_r($_SERVER);哪个对我不起作用.我希望使用CI的方式不同.
codeigniter-2 ×10
codeigniter ×8
php ×8
apache ×1
autoload ×1
jquery ×1
jquery-ui ×1
mamp ×1
uri ×1