繁体   English   中英

将Codeigniter从1.7.2升级到3.1.6

[英]Upgrade Codeigniter from 1.7.2 to 3.1.6

我需要将Codeigniter从1.7.2升级到3.1.6。 我看到两者之间有很多中间版本。 有没有一种快速的方法,或者我应该关注之间的每个更新?

我刚刚从2.1.6升级到3.1.6。 最简单的方法是在新目录中全新安装3.1.6。 配置与您当前的生产站点类似的所有内容... config.php,database.php,.htaccess等,等等。将所有控制器/模型/视图从生产站点复制到新站点。 记住要使用正确的Ucase标记来重命名新的模型/控制器/库文件...例如:home.php在3.x中变为Home.php。

测试新站点后,只需重命名目录即可从旧目录切换到新目录。 比尝试修改旧站点更容易。 而且,如果您需要还原,则旧站点仍然存在。

根据官方Codeigniter的文档,它说您需要逐步进行升级。 这是官方CI网站的升级链接 通过某种方式的研究,我对步骤1有所了解。您需要通过上述链接手动更新到2.2.x,但是在此版本之后,您可以直接跳至3.x版本

方法如下:

前提条件警告:在执行更新之前,您应该通过将index.php文件替换为静态文件来使站点离线。

步骤1:更新您的CodeIgniter文件替换system /目录中的所有文件和目录,并替换index.php文件。 如果对您的index.php进行了任何修改,则需要在此新版本中重新进行修改。

注意 :您必须先删除旧的system /目录,然后将新目录放到原位置。 简单的复制粘贴可能会导致问题。

步骤2:更新类文件名从CodeIgniter 3.0开始,所有类文件名(库,驱动程序,控制器和模型)都必须以类似Ucfirst的方式命名,或者换句话说,它们必须以大写字母开头。

例如,如果您具有以下库文件:

application/libraries/mylibrary.php

…然后您必须将其重命名为:

application/libraries/Mylibrary.php

驱动程序库,扩展和/或CodeIgniter自己的库和核心类的覆盖也是如此。

application/libraries/MY_email.php application/core/MY_log.php

以上文件应分别重命名为以下文件:

application/libraries/MY_Email.php application/core/MY_Log.php

控制器:

application/controllers/welcome.php -> application/controllers/Welcome.php

楷模:

application/models/misc_model.php -> application/models/Misc_model.php

请注意,这不会影响目录,配置文件,视图,帮助程序,挂钩和其他任何内容-它仅适用于类。

现在,您必须遵循一个简单的规则-Ucfirst中的类名,其他所有内容都小写。

步骤3:替换config / mimes.php此配置文件已更新,以包含更多用户mime类型,请将其复制到application / config / mimes.php。

步骤4:从您的config / autoload.php中删除$ autoload ['core']

自$ CodeIgniter 1.4.1起,已不建议使用$ autoload ['core']配置数组,现已将其删除。 而是将您可能已在其中列出的所有条目移动到$ autoload ['libraries']。 步骤5:移动您的Log类替代或扩展

日志类被认为是“核心”类,现在位于system / core /目录中。 因此,为了使您的Log类覆盖或扩展起作用,您需要将它们移至application / core /:

application/libraries/Log.php -> application/core/Log.php application/libraries/MY_Log.php -> application/core/MY_Log.php

步骤6:更新您的会话库使用情况

会话库已在CodeIgniter 3中完全重写,现在具有许多新功能,但这也意味着您应该进行一些更改…删除了一些配置选项,并添加了一些配置选项。 您应该真正阅读整个会话库手册以了解详细信息,但是这里是您应该进行的简短更改列表:

    Set your $config['sess_driver'] value

    It will default to ‘files’, unless you’ve previously used $config['sess_use_database'], in which case it will be set to ‘database’.

    Set a $config['sess_save_path'] value

    For the ‘database’ driver, a fallback to $config['sess_table_name'] is in place, but otherwise requires you to read the manual for the specific driver of your choice.

    Update your ci_sessions table (‘database’ driver only)

    The table structure has changed a bit, and more specifically:

            session_id field is renamed to id
            user_agent field is dropped
            user_data field is renamed to data and under MySQL is now of type BLOB
            last_activity field is renamed to timestamp

    This is accompanied by a slight change in the table indexes too, so please read the manual about the Session Database Driver for more information.

    Remove $config['sess_match_useragent']

    The user-agent string is input supplied by the user’s browser, or in other words: client side input. As such, it is an ineffective feature and hence why it has been removed.

    Remove $config['sess_encrypt_cookie']

    As already noted, the library no longer uses cookies as a storage mechanism, which renders this option useless.

    Remove $config['sess_expire_on_close']

    This option is still usable, but only for backwards compatibility purposes and it should be otherwise removed. The same effect is achieved by setting $config['sess_expiration'] to 0.

    Check “flashdata” for collisions with “userdata”

    Flashdata is now just regular “userdata”, only marked for deletion on the next request. In other words: you can’t have both “userdata” and “flashdata” with the same name, because it’s the same thing.

    Check usage of session metadata

    Previously, you could access the ‘session_id’, ‘ip_address’, ‘user_agent’ and ‘last_activity’ metadata items as userdata. This is no longer possible, and you should read the notes about Session Metadata if your application relies on those values.

    Check unset_userdata() usage

    Previously, this method used to accept an associative array of 'key' => 'dummy value' pairs for unsetting multiple keys. That however makes no sense and you now have to pass only the keys, as the elements of an array.

    // Old
    $this->session->unset_userdata(array('item' => '', 'item2' => ''));

    // New
    $this->session->unset_userdata(array('item', 'item2'));

最后,如果您已经编写了Session扩展,则现在必须将其移至application/libraries/Session/ directory,尽管有可能现在也必须对其进行重构。

步骤7:更新您的config / database.php

由于3.0.0将Active Record重命名为Query Builder,因此在config / database.php中,您需要将$ active_record变量重命名为$ query_builder:

$active_group = 'default';
// $active_record = TRUE;
$query_builder = TRUE;

步骤8:更换错误模板

在CodeIgniter 3.0中,错误模板现在被视为视图,并已移至application / views / errors目录。

此外,我们添加了对纯文本格式的CLI错误模板的支持,该格式不同于HTML,适用于命令行。 当然,这需要另一个层次的分离。

将旧模板从application / errors移到application / views / errors / html是安全的,但是您必须从CodeIgniter存档中复制新的application / views / errors / cli目录。 步骤9:更新您的config / routes.php文件包含:any的路由

从历史上看,CodeIgniter始终在路由中提供:any通配符,目的是提供一种匹配URI段中任何字符的方法。

但是,:any通配符实际上只是正则表达式的别名,并且以前以。+的方式执行。 这被认为是一个错误,因为它也与/(正斜杠)字符匹配,该字符是URI段定界符,而绝不是故意的。

在CodeIgniter 3中,:any通配符现在将表示[^ /] +,因此它将不与正斜杠匹配。

当然,有很多开发人员已将此错误用作实际功能。 如果您是其中之一,并且想匹配正斜杠,请使用。+正则表达式:

(。+)//匹配任何内容(:any)//匹配任何字符,除了'/'

目录和“ default_controller”,“ 404_override”

如您所知,$ route ['default_controller']和$ route ['404_override']设置不仅接受控制器名称,而且接受控制器/方法对。 但是,路由逻辑中的错误使某些用户可以将其用作目录/控制器。

如前所述,此行为是偶然的,并且从未计划或记录在案。 如果您依赖它,您的应用程序将随CodeIgniter 3.0一起中断。

版本3中的另一个显着变化是,现在每个目录都应用了“ default_controller”和“ 404_override”。 为了解释这意味着什么,让我们看下面的例子:

$ route ['default_controller'] ='main';

现在,假设您的网站位于example.com,您已经知道,如果用户访问http://example.com/ ,则上述设置将导致加载“主”控制器。

但是,如果您有一个application / controllers / admin /目录,并且用户访问了http://example.com/admin/ ,该怎么办? 在CodeIgniter 3中,路由器还将在admin /目录下查找“主”控制器。 如果未找到,则将触发“未找到”(404)。

相同的规则适用于“ 404_override”设置。

最后一步:对于所有其他丢失的文件/文件夹/设置,这里是链接Link

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM