4

我刚刚开始使用 CodeIgniter,我正在尝试对我的常规模块/函数进行散列,以使它们在 MVC 框架中正常工作。对于拥有强大 CodeIgniter 背景的任何人,我有几个具体问题:

会议

CodeIgniter 会话将客户端的会话数据存储在 cookie 中,这对我不起作用。我知道有一些替代品,或者我可以构建自己的库/助手;但我只是看不到使用$_SESSION.

如果我只使用$_SESSION,我会对框架的其余部分有任何问题吗?框架的任何其他部分是否依赖于使用 CodeIgniter 会话?

对于这么基本的东西,我对跳出框架感到有点奇怪,但我对普通的 PHP 很满意。我基本上只是希望将 CodeIgniter 用于 MVC,并为我的项目实施更加模块化的方面。

代码流程和配置

我有一些配置项需要在几乎其他任何事情之前完成。

例如,假设我有一个常量APP_LIVE,它根据当前服务器的名称设置为真/假。这必须尽早发生,因为路径、错误报告、CodeIgniter 系统和应用程序文件夹等都将基于它进行设置。

问题是system_folder, 和application_folder(将根据代码运行的服务器设置)在index.php文件中首先设置,在任何配置加载之前。

此外,我有一个功能可以检查 URL 中的内容,并且可以在页面加载之前重定向。例如,某些页面需要www.在 URL 中出现(用于 SEO)、跟踪关联公司、访问者来源、营销标志等。

把这种必须很早就发生的事情放在哪里最好?我知道有一个配置文件、一个自动加载文件、一个常量文件等,但是对于某些项目来说已经太晚了。将这些东西简单地放在主index.php文件的顶部,或者将它们包含到全局配置文件中是一种不好的做法吗?再一次,我觉得我正在走出框架,想知道我这样做是不是因为我对它还没有一个扎实的理解?

布局/页眉页脚

像大多数人一样,我有一个顶部页眉、导航、页脚等。我习惯于将它们放在文件中,这些文件包含在我的页面模板中。我相信我可以通过让它们查看并将它们包含在我的主页视图中来以同样的方式做到这一点。这是最好的方法吗?其中一些需要一些数据;比如他们在哪个页面上进行导航等。处理导航、共享页眉/页脚等的最佳方式是什么?

4

5 回答 5

3

新发布的 CI 1.7 处理数据库中的会话(如果您正在使用)。

但是,CI 被设计为松散耦合,因此如果您决定改用 $_SESSION,您应该不会注意到任何重大问题。

对于您的页眉/页脚/导航,您可以创建(例如)headerview.php、footerview.php 和 contentview.php,并通过在控制器中执行以下操作将数据传递给您的视图:

$data['title'] = 'about us';
$data['content'] = 'hello world!';

$this->load->view('headerview', $data);
$this->load->view('contentview', $data);
$this->load->view('footerview');

基本上,您可以像对待包含一样对待这些视图,但还有一个额外的好处是您可以更改其中的变量。我会避免从视图中调用其他视图,但这可能只是我。

我自己添加了一次或两次 index.php,以设置初始值等,并且从未遇到过问题。

恭喜您选择了框架;我相信你不会失望的。;)

于 2008-11-08T07:48:56.627 回答
1

您可以在每个控制器中有多个 load->view 行,但我个人认为它是耦合的。我强烈建议您查看 CodeIgniter 中的钩子,您可以在其中定义将在每个控制器/方法之后自动运行的函数(AOP 的一个很好的示例)。

于 2008-11-08T08:02:15.680 回答
1

实际上 $_SESSION 数组似乎没有设置,因此您不能使用本机 PHP 会话(至少在 1.7 上)。然而,在 CodeIgniter wiki 中有一个使用原生 php 会话的会话类 - 您可以像使用其他会话一样使用它,但它仅在 cookie 中存储 session_id。这是: http ://codeigniter.com/wiki/Native_session/

于 2008-11-11T23:00:56.690 回答
0

@lacho 我在 $_SESSION 上创建了自己的身份验证库。它在 1.7 上运行良好。

我相信 $_SESSION 更安全,因为 CI“会话”是存储在客户端的 cookie,它们被归类为不可信任的“用户传递信息”。

于 2008-11-17T04:05:25.363 回答
0

您可以使用自己的会话类尝试使用本机

http://www.moreofless.co.uk/using-native-php-sessions-with-codeigniter/

于 2012-11-14T06:29:52.483 回答