如何在Yii中提交后打开另一个视图

时间:2015-02-24 11:08:43

标签: php html yii submit

我有一个搜索提交按钮,我希望我的应用程序在点击时打开另一个视图。这是我的代码:

视图/超市/ index.php的:

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
use app\views\supermarkets\search;
?>
<h1>Supermarkets</h1>
<ul>

<p> 

    Search by Name

</p>
<Form Name ="form1" Method ="POST" ACTION = "app\views\supermarkets\search.php">
<INPUT TYPE = "Text" VALUE ="search by name" NAME = "searchname">
<input type="submit" value="Search">
<h3> </h3>

视图/超市/ search.php中:

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Supermarkets</h1>
<ul>



<?php



    if (isset($_POST['searchname']) && $_POST['searchname']!='') {

    $sname = $_POST['searchname'];



    $row = Yii::app()->db->createCommand(array(
    'select' => '*',
    'from' => 'supermarkets',
    'where' => array('like', 'Name','%'.$keyword.'')

))->queryRow();

$array = (array) $row;

    }
    echo $array;
function build_table($array){

    // start table

    $html = '<table class="altrowstable" id="alternatecolor">';

    // header row

    $html .= '<tr>';

    foreach($array[0] as $key=>$value){

            $html .= '<th>' . $key . '</th>';

        }

    $html .= '</tr>';

    // data rows

    foreach( $array as $key=>$value){

        $html .= '<tr>';

        foreach($value as $key2=>$value2){

            $html .= '<td>' . $value2 . '</td>';

        }

        $html .= '</tr>';

    }

    // finish table and return it

    $html .= '</table>';

    return $html;

}



echo build_table($array);

?>

<?= LinkPager::widget(['pagination' => $pagination]) ?>

提交我收到此错误:

找不到对象!

在此服务器上找不到请求的URL。引用页面上的链接似乎是错误的或过时的。请告知该页面的作者有关错误的信息。

如果您认为这是服务器错误,请与网站管理员联系。

我知道我的代码有问题,但我无法理解。我不确定这是否是将POST值提交到我的搜索视图的正确方法。

3 个答案:

答案 0 :(得分:1)

您的问题来自这一行:

<Form Name ="form1" Method ="POST" ACTION = "app\views\supermarkets\search.php">

该操作必须是可调用的URL。相反,您正在提供视图文件的路径。

使用Yii MVC约定,您需要生成一个控制器函数并将表单操作指向该路径。

在您看来:

< form name ="form1" method ="POST" action="<?php Yii::createUrl('supermarket/search'); ?>" >

在您的控制器中:

    class SupermarketController extends CController
    {
        public function actionSearch()
        {
            // ... Your code here.
            $this->render('another_view', array(...);
        } 
}

答案 1 :(得分:1)

您不应在项目中使用绝对路径。这里是我在Yii1中使用的方法列表。希望它能在Yii2中运行。

  1. 创建网址

    $ url = Yii :: app() - &gt; createUrl('site / index',array('id'=&gt; 100));

  2. 从Controller

    创建URL

    Yii :: app() - &gt; controller-&gt; createUrl(“index”,array(“id”=&gt; 100));

  3. 创建绝对网址

    的Yii ::应用程序() - &GT; createAbsoluteUrl( '网站/索引',阵列( 'ID'=→100));

  4. 创建链接

    echo CHtml :: link('text',array('site / index','id'=&gt; 100));

  5. 重定向浏览器

    $这 - &GT;重定向(阵列( '站点/索引', 'ID'=→100));

  6. 删除没有值的数组('id'=&gt; 100)

答案 2 :(得分:1)

用户无法直接访问“protected”文件夹中的查看文件。 crafter的回答是正确的。 see here了解有关控制器的信息