【发布时间】:2012-09-19 20:23:30
【问题描述】:
我对执行以下操作的正确方法有些困惑。这是一个类,一个函数还是一个对象? (不确定)所以这里(请善待)我正在同时学习 codeigniter/php。
$is_live = $this->session->userdata('email');
$is_live = ucwords($is_live);
if (!$is_live == null)
echo 'Hello, '.$is_live.
' <b>(Not you? '.'<a href="' .base_url().
'main/logout">Log Out</a>) </b>';
我编写了这段代码,它检查是否设置了会话,如果为真,则回显详细信息。我目前在我的view/main 上有此代码但是我希望在所有页面上显示此代码。
这样做的正确方法是什么?
- 我是否要创建一个
view/header,它会自动加载到每个页面上,然后在其中插入这个code? - 我是否在
helper文件中创建class/public function并将其加载到需要的位置? - 是否在
library文件中创建class/public function并将其加载到需要的位置? - 我是否在控制器中创建
public function?
-额外-
我的假设是选项1 但我很好奇如果我想在特定页面的另一个位置显示此信息怎么办?我不想复制/粘贴代码块,因为那太草率了。
我将如何设置它以便我可以在需要的地方调用它?
例如$this->load->helper('check_for_sess');
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class isLive
{
public function is_live() {
$is_live = $this->session->userdata('email');
$is_live = ucwords($is_live);
if (!$is_live == null)
echo 'Hello, '.$is_live.
' <b>(Not you? '.'<a href="' .base_url().'main/logout">Log Out</a>) </b>';
}
}
在view我试过这个:
<?php
$isLive = new isLive;
$isLive->is_live();
?>
但是这不起作用并导致'函数 userdata() on a non-object error'
有人可以解释实现我想要的解决方案的正确方法和正确的语法吗?提前致谢!
-UPDATE-- 试图创建一个库 - 仍然出错。
#Created a library
class CheckSess
{
function IsLive()
{
$is_live = $this->session->userdata('email');
$is_live = ucwords($is_live);
if (!$is_live == null)
{
$check_msg = 'Hello, '.$is_live.
' <b>(Not you? '.'<a href="' .base_url().'main/logout">Log Out</a>) </b>';
}
return $check_msg;
}
}
#In the View
<?php echo $this->CheckSess->IsLive(); ?>
#in the controller
$this->load->library('CheckSess');
--更新--
class CheckSess {
function IsLive()
{
$CI =& get_instance();
$is_live = $CI->session->userdata('email');
$is_live = ucwords($is_live);
if (!$is_live == null)
{
return 'Hello, '.$is_live.
' <b>(Not you? '.'<a href="' .base_url().'main/logout">Log Out</a>) </b>';
}
}
}
设置这个^是libraries文件夹
view 显示 <?php echo $this->CheckSess->IsLive(); ?>
controller 显示 $this->load->library('CheckSess');
请指教。再次感谢!
错误---
( ! ) SCREAM: 忽略错误抑制 ( ! ) 致命错误:在第 56 行的 C:\wampserver\www\test-app\application\views\homepage.php 中的非对象上调用成员函数 IsLive() 调用栈
时间记忆功能定位
1 0.0005 151432 {main}( ) ..\index.php:0 2 0.0014 187792 require_once('C:\wampserver\www\test-app\system\core\CodeIgniter.php') ..\index.php:202 3 0.0277 1537000 call_user_func_array () ..\CodeIgniter.php:359 4 0.0277 1537048 Main->index() ..\CodeIgniter.php:359 5 0.0283 1540200 CI_Loader->view() ..\main.php:8 6 0.0283 1540640 CI_Loader->_ci_load( ) ..\Loader.php:419 7 0.0287 1566584 包括('C:\wampserver\www\test-app\application\views\homepage.php')..\Loader.php:833
【问题讨论】:
-
你有一些不安全和不稳定的代码,你的
if()没有else部分,所以当你的条件失败时,你会得到一个错误,你正在尝试echo nothing.至少添加} else { echo ""; }以使代码在各种情况下都能正常工作 -
否则返回 false 怎么样? -----ERROR---- 遇到 PHP 错误严重性:通知消息:未定义属性:CI_Loader::$CheckSess 文件名:views/homepage.php 行号:50
-
您真的要在视图文件中回显“false”吗?或者您应该在调用此方法时在视图文件中构建 if-then-else。此错误实际上表明加载库时出现问题,因此您应该查看它是否在相应的文件夹中并且所有名称都正确。尝试以这种方式加载库:
$this->load->library('CheckSess', '', 'checksess');,然后像$this->checksess->isLive()一样使用它 -
是的,有效。 - 你怎么能这么快破译那个错误。我发现错误消息有些晦涩。我按照
libraries的命名说明到了一个 T - 不知道为什么必须在控制器中这样重命名它。谢谢! -
codeigniter.com/user_guide/general/creating_libraries.html --> 命名约定 "文件名必须大写。例如:Myclass.php 类声明必须大写。例如:class Myclass 类名和文件名必须匹配。"
标签: php oop codeigniter