【问题标题】:Error in search and display records using yii framework使用yii框架搜索和显示记录出错
【发布时间】:2014-04-04 09:27:50
【问题描述】:

我是 yii 框架的新手。我正在使用 yii 框架在数据库中搜索并显示在另一个页面中。我的控制器是 Sitecontroller.php,查看页面是 search.php 和 search_result.php。我的模型是job.php。我的错误是 "urlencode() 期望参数 1 是字符串,给定对象

C:\wamp\www\yii\framework\web\CUrlManager.php(440)".

我的控制器是 Sitecontroler.php

<?php
class SiteController extends Controller
{
public function actionsearch()
  {
   $user_id = trim($_GET['id']);  
   $model = new Job ;
   if(isset($_POST['Job']))
      {
        $model->attributes=$_POST['Job'];
        $title=$_POST['Job']['title'];
        $title=trim($title);
        $model=Job::model()->find(array('select'=>'*',"condition"=>"title like '%$title%'",));
        $number=count($model);
        if($number>0)
        {
          $this->redirect($this->createUrl('site/search_result',array('title'=>$title)));       
        }

      }
   $this->render('search',array('model' =>$model));
 }
public function actionsearch_result()
  {
    $title=$_GET['title'];  
    $model = new Job ;
    $model=Job::model()->find(array('select'=>'*',"condition"=>"title like '%$title%'",));
    $this->render('search_result',array('model' =>$model));
 }  
 }?>

我的查看文件-search.php

 <div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>false,
'htmlOptions' => array(),
    'clientOptions'=>array(
    'validateOnSubmit'=>true
),
 )); ?>
<?php
foreach(Yii::app()->user->getFlashes() as $key => $message) {
    echo '<div class="flash-' . $key . '">' . $message . "</div>\n";
}
 ?>
    <div class="row">
   <?php echo $form->labelEx($model,'Keyword'); ?>

    <?php echo $form->textField($model,'title'); ?>
    <?php echo $form->error($model,'title'); ?>
</div>
<div class="row buttons">
    <?php echo CHtml::submitButton('Search'); ?>
</div>
<?php $this->endWidget(); ?>
</div>

查看文件-search_result.php

<div style="float:right;margin-right:285px;">
 <h1>Search Jobs</h1>
<table width="200" border="1">
 <tr>
<td>SI No</td>
<td>Title</td>
<td>Key Skill</td>
<td>Experince</td>
 </tr>
 <?php
foreach($model as $models)  
 { 
 ?>
<tr>
<td></td>
<td><?php echo $models->title; ?></td>
<td><?php echo $models->key_skills; ?></td
><td><?php echo $models->experience; ?></td
 ></tr>
<?php
}
 ?>
 </table>
 </div>

有没有人帮帮我?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    这一行有问题

    $this->redirect(array('site/Search_result',array('model' =>$model))); 
    

    你应该试试这个

    $this->redirect($this->createUrl('site/search_result',array('parameter'=>'value'))); 
    

    注意:- 您不能通过 URL 发送 $model,因为它是一个对象,这就是您收到此错误的原因。

    更新

    在你的 search_result.php 中

    更改此代码

    foreach($model as $models)  
     { 
     ?>
    <tr>
    <td></td>
    <td><?php echo $models->title; ?></td>
    <td><?php echo $models->key_skills; ?></td
    ><td><?php echo $models->experience; ?></td
     ></tr>
    <?php
    }
    

    到这里

    <tr>
    <td></td>
    <td><?php echo $model->title; ?></td>
    <td><?php echo $model->key_skills; ?></td
    ><td><?php echo $model->experience; ?></td
     ></tr>
    

    说明

    在这一行

    $model=Job::model()->find(array('select'=>'*',"condition"=>"title like '%$title%'",));
    

    如您所见,您已使用 find() 来获取数据。所以 find() 将返回单行(因此是单个对象)而不是对象数组。如果你想获取多条记录,那么你应该使用 findAll()

    所以当使用 findAll() 你的代码变成了

    $model=Job::model()->findAll(array('select'=>'*',"condition"=>"title like '%$title%'",));
    

    然后您可以使用与在 search_result.php 文件中使用的代码相同的代码,例如

    foreach($model as $models)  
     { 
     ?>
    <tr>
    <td></td>
    <td><?php echo $models->title; ?></td>
    <td><?php echo $models->key_skills; ?></td
    ><td><?php echo $models->experience; ?></td
     ></tr>
    <?php
    }
    

    【讨论】:

    • 我更改了控制器代码。请看一下。现在显示错误尝试获取非对象 C:\wamp\www\yii\jobsite_orginal\protected\views\site\search_result 的属性。 php(26)
    • 你能看出哪一行是第26行吗?
    • title; ?> 在 search_result.php 中
    • title; ?> key_skills; ?> 经验; ?> 这样我只得到了一行,但我想要该表中的所有行
    【解决方案2】:

    我认为问题可能在于,您对自己的操作命名不当。 你应该使用camelCase:

    public function actionSearch()
    ...
    public function actionSearch_result()
    

    这是 Yii 需要的命名,所以它可以找到你的动作。 redirect 方法需要一个动作,没有这个我想它找不到它。

    重定向也需要 controler/action 路由,这意味着在您的情况下它应该是:

    $this->redirect(array('site/search_result','model' =>$model)); 
    

    请记住,函数是带有大写S的actionSearch_result,但路线本身是带有小写s

    site/search_result

    【讨论】:

    • 请查看我的控制器代码,我已更改它。再次显示相同的错误
    • 你还是错了,请看我的更新——你应该只重命名函数名。另外model-&gt;$model也不应该在一个单独的数组中。请查看文档yiiframework.com/doc/api/1.1/CController#redirect-detail
    • 动作名称中是否有下划线或小写的's'无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多