标签: codeigniter-2

在Codeigniter 2中扩展多个模型

如何设置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.

感谢您的帮助.

php codeigniter codeigniter-2

5
推荐指数
2
解决办法
4262
查看次数

是否有更好的(轻量级)解决方案自动完成与PHP和codeigniter没有jquery ui?

我正在为我的网站搜索轻量级和交叉浏览器兼容的解决方案.这是我成功实施的解决方案:

代码: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.

我计划在每个页面中实现自动完成框,而且似乎只需要一个自动完成框就会花费很多.

这是一个较小的解决方案吗?

php jquery codeigniter jquery-ui codeigniter-2

5
推荐指数
1
解决办法
1789
查看次数

CodeIgniter验证:可以验证GET查询字符串吗?

表单验证库似乎只适用于POST.我需要使用查询字符串,并希望使用CI来验证传递的值.有没有办法做到这一点?

codeigniter codeigniter-2

5
推荐指数
1
解决办法
5479
查看次数

从DataTables中第0行的数据源请求未知参数"1"

当我尝试从我的数据库中检索数据到表时,我收到此错误:

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.

为什么我会收到该错误以及如何将数据检索到表中?

php codeigniter-2 jquery-datatables

5
推荐指数
2
解决办法
2万
查看次数

如何禁用直接访问回调函数?

<? 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)

codeigniter codeigniter-2

5
推荐指数
1
解决办法
1388
查看次数

所提交的网址带有不被接受的字符.在URL中编码var

我的申请表上有注册表.当有人完成注册时,会收到一封电子邮件,其中包含确认注册的链接(典型情况).

链接是这样的

http://www.myDomain.com/registration/validation/m0NQGT4XzQgId5zuH/1PrDqNSP7YWq81Mba8cSXLb1WsQ5aVqf2sQ3Ece3ZdmxYvLjztaGp7Xmhv8ArjFET/8Q==

  • 注册是控制器
  • 验证是功能
  • 最后一个是用户名

编码用户名:

$encrypted_username = $this->encrypt->encode($username);
Run Code Online (Sandbox Code Playgroud)

但是,访问该链接会返回以下错误

所提交的网址带有不被接受的字符.

设置$config['permitted_uri_chars'] = '';一切顺利,但他们说我们不应该这样做.

那么,我该如何解决这个问题呢?

php uri codeigniter-2

5
推荐指数
1
解决办法
1万
查看次数

PHP版本5.4.13错误?CodeIgniter Bug?或者,解释?

所以......我把一些代码住一天(即工作我的本地机器上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错误?


结构体:

Main.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)

adminstration.php …

php codeigniter codeigniter-2

5
推荐指数
1
解决办法
997
查看次数

CodeIgniter自动加载特定的类

我按照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)

为了只针对这两个类,但这似乎不起作用.我可能做错了什么想法?

php codeigniter autoload codeigniter-2

5
推荐指数
2
解决办法
1万
查看次数

CodeIgniter项目的第一个HTTP请求的延迟非常高

我和一位朋友刚刚开始参与一个项目,其他人几年前就停止了开发,我们正试图复活它.我们已经解决了大多数与设置相关的问题,但是我们无法弄清楚这是一个非常烦人的问题.

在我们的本地主机中,所有页面都需要很多时间来加载/刷新.我不是指资产,脚本或任何东西,问题是在第一个请求完成之前的延迟.大多数情况下需要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)

php apache mamp codeigniter codeigniter-2

5
推荐指数
1
解决办法
692
查看次数

CodeIgniter - 在请求标头中打印自定义值

如何使用CodeIgniter打印在收到的请求的标题中设置的值?

我试过print_r($_SERVER);哪个对我不起作用.我希望使用CI的方式不同.

php codeigniter codeigniter-2 codeigniter-3

5
推荐指数
1
解决办法
8266
查看次数