Yii2基本模式不调用main.php

Posted

技术标签:

【中文标题】Yii2基本模式不调用main.php【英文标题】:Yii2 basic mode do not call main.php 【发布时间】:2018-10-16 05:38:00 【问题描述】:

我在 Yii2 框架上使用基本模式。我创建了两个控制器 - SiteController 和 CategoryController。我有两个视图很少的文件夹-站点(索引和关于)和类别(类别和搜索)。 当我通过 SiteController 渲染视图时,一切正常,但是当我通过 CategoryController actionSearch 渲染视图时 - 不要调用 main.php 并且不在视图中显示任何 html,但如果我调用 die - 结果就在那里。 这是一个代码: 型号:

namespace app\models;

use yii\db\ActiveRecord;

class Categories extends ActiveRecord

    public static function tableName()
    
        return 'categories';
    
    public function getProducts()
        return $this->hasMany(Products::className(), ['category_id' => 'id']);
    

和类别控制器:

public function actionSrch() 
    $cat = Categories::findOne(1);
    $q = Yii::$app->request->get('q');
    if(isset($q) and $q!='')
        $query = Products::find()->where(['like', 'title', $q]);
        // pagination
        $pages = new Pagination([
            'totalCount'     => $query->count(),
            'pageSize'       => 4,
            'forcePageParam' => false,
            'pageSizeParam'  => false ]);

        $products = $query->offset($pages->offset)->limit($pages->limit)->all();
    else
        $products = Products::find()->where('title<>:title', [':title'=>''])->all();
    
    $this->render('search', compact('products','pages', 'q', 'cat'));


和搜索表单:

 <div class="col-sm-3">
     <div class="search_box pull-right">
         <form action="<?= \yii\helpers\Url::to(['categories/search']) ?>" method="get">
            <input type="text" placeholder="Search" name="aaa">
         </form>
     </div>
 </div>

以及search.php中的视图

use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\LinkPager;
<ul class="catalog category-products">
    <?= \app\components\MenuWidget::Widget(['tpl' => 'menu']) ?>
</ul>
<div class="col-sm-9 padding-right">
     <div class="features_items"><!--features_items-->
          <?php if(!empty($products)): ?>
           <?php $i = 0; foreach($products as $prd): ?>
          <h2><?= $prd->price ?></h2>
           <?php endif; ?>
           <?php endforeach; ?>
           <?php else :?>
               <div class="alert alert-danger">Do not have products!!!</div>
             <?php endif; ?>

【问题讨论】:

可能是动作名称错误 public function actionSrch() 需要 public function actionSearch() 【参考方案1】:

首先检查您的操作名称actionSrchactionSearch

并在渲染文件之前添加return,如下所示。

public function actionSrch() 
    $cat = Categories::findOne(1);
    $q = Yii::$app->request->get('q');
    if(isset($q) and $q!='')
        $query = Products::find()->where(['like', 'title', $q]);
        // pagination
        $pages = new Pagination([
           'totalCount'     => $query->count(),
           'pageSize'       => 4,
           'forcePageParam' => false,
           'pageSizeParam'  => false 
        ]);

        $products = $query->offset($pages->offset)->limit($pages->limit)->all();
    else
        $products = Products::find()->where('title<>:title', [':title'=>''])->all();
    
    return $this->render('search', compact('products','pages', 'q', 'cat'));

参考Yii2 Base Actions 和Yii2 Render()

【讨论】:

以上是关于Yii2基本模式不调用main.php的主要内容,如果未能解决你的问题,请参考以下文章

Yii2.0配置pathinfo模式

text 没有main.php的Yii2视图

Yii2.0随笔 路由

yii2.0 URL美化

yii2 緩存

yii2布局选择与属性标签设置