【问题标题】:Yii: Trying to get property of non-objectYii:试图获取非对象的属性
【发布时间】:2014-04-24 10:33:12
【问题描述】:

我遇到了很多关于“试图获取非对象的属性”的帖子,但我仍然无法弄清楚我的问题。 我有一个 webapp,当我创建一个表单时,它给了我这个错误-

view.php:

$this->breadcrumbs=array(
    'Events'=>array('index'),
$model->ename, //Error at this line
);

控制器:

public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
 ));
 }

public function loadModel($id)
{
$ename= Event::model()->ename;
$model = Event::model()->findByPk($id,$ename);//tried this since I have composite key
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}

【问题讨论】:

  • 如果 $this->loadModel($id) 返回任何对象或空值,您应该调试/检查(可能正在使用 vardump)。如果有时它可以返回 null,那么您应该对其进行一些限制。
  • 你的控制器叫什么名字,你的模型叫什么名字?
  • 控制器名称为EventController,型号为Event
  • 您确定您的$id 是一个有效的ID,并且您也可以在您的数据库中找到这个ID?因为就像@lihsus 写的那样,看起来你的控制器找不到这个id 的模型。

标签: php yii


【解决方案1】:

我不是 Yii 专家,但总的来说这意味着 $model 不是对象。在大多数框架中,您会使用 $this->model 而不是 $model。会是这样吗?所以试试$this->model->ename

How to use model object in Yii Controller and View好像是这样的。

【讨论】:

  • 不,那是错误的。当您通过数组通过渲染函数传递模型时,该模型在视图中的$model 下可用。
  • 好的,那么一些 Yii 专家必须回答这个问题,否则他必须 var_dump 一切。
  • 是的,他必须 var_dump 一切 - 我猜他的 $id 是错误的。所以他不能加载模型。所以$model 就是null
【解决方案2】:

根据您加载模型的方式,当没有结果时,结果将为NULL 或空arrayfind 返回NULLfindAll 总是会返回一个array,但是当没有结果时会为空。

查看您的代码,模型的初始加载失败。很可能是因为请求的数据库记录不存在。要检查模型是否加载成功,您可以这样做:

if(is_null($model)) { /* Used with find */ }
if(!count($models)) { /* used with findAll */ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多