【问题标题】:Codeigniter 4 Call to a member function get() on nullCodeigniter 4在null上调用成员函数get()
【发布时间】:2021-01-23 15:13:06
【问题描述】:

我在 CI3 中有一个项目并为 CI4 更新

我的模板有问题,我在 null 上收到对成员函数 get() 的调用。

我的观点不起作用调用 $this->traducao->get('search_string');请帮我更新课程和图书馆

我在图书馆中的功能

<?php
namespace App\Libraries;

use Config\Database;


class menus {

  public $listMenus;
  public $listSeo;

  public function __construct(){
    $this->set();

  }

  public function set(){
    $db      = Database::connect();
    $builder = $db->table('menu');
    $query = $builder->where("parente", 0)
                      ->where("ativo", 1)
                      ->orderBy('posicao', 'asc')
                      ->get()->getResultArray();

    if(is_array($query)){
      $menusPai = $query;
    }
    $query2 = $builder->where("parente > 0")
                      ->where("ativo", 1)
                      ->orderBy('posicao', 'asc')
                      ->get()->getResultArray();

     if(is_array($query)){
        $menusFilhos = $query2;
    }
                           
   // $menusFilhos = ($query2->countAllResults() > 0) ? $query2->getResultArray() : false;

    $menus = [];

    foreach ($menusPai as $key => $value)
    {
        $this->listSeo[$value['link']]['pagina_titulo']      = $value['pagina_titulo'];
        $this->listSeo[$value['link']]['pagina_keywords']    = $value['pagina_keywords'];
        $this->listSeo[$value['link']]['pagina_description'] = $value['pagina_description'];

        $menus[$value['id']]['filhos'] = [];
        $menus[$value['id']]['dados']  = $value;

        if ($menusFilhos)
        {
            foreach ($menusFilhos as $k => $v)
            {
                if ($v['parente'] == $value['id'])
                {
                    $this->listSeo[$v['link']]['pagina_titulo']      = $v['pagina_titulo'];
                    $this->listSeo[$v['link']]['pagina_keywords']    = $v['pagina_keywords'];
                    $this->listSeo[$v['link']]['pagina_description'] = $v['pagina_description'];

                    $menus[$value['id']]['filhos'][] = $v;
                }
            }
        }
    }

    $this->listMenus = $menus;
  }

  public function get(){
    return $this->listMenus;
  } 

  public function seo($tag){
    $uri = new \CodeIgniter\HTTP\URI();
    print_r($uri);
    $uri = ($this->CI->uri->uri_string() == '') ? '/' : $this->CI->uri->uri_string();

    return $this->listSeo[$uri][$tag];

   // return $this->listSeo[$uri][$tag];
    
  }


}

我的 ControllerBase

<?php
namespace App\Controllers;

use CodeIgniter\Controller;
use App\Libraries\My_parser;
use App\Libraries\Preferencia;
use App\Models\index_model;
use App\Libraries\Traducao;
use App\Libraries\Menus;

class BaseController extends Controller
{
    protected $helpers = [];
    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);
        $this->_db = \Config\Database::connect();
        $this->My_parser = new My_Parser();
        $this->_model = new \App\Models\index_model();
        $this->traducao = new Traducao();
    }

    
      public function output($data, $status){
        $this->output
        ->set_status_header(200)
        ->set_content_type('application/json', 'utf-8')
        ->set_output(
          json_encode(
            array(
              'status'=> $status,
              'response'=> $data    
            ), 
            JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
          )
        )->_display();
        exit;
      }
}

我的看法

  <div class="container">
<h2 class="text-center no-m"><?= $this->traducao->get('HOME_EMPRESAS_PARCEIRAS_TITULO') ?></h2>

和我的 index.php 加载视图布局

<?= $this->extend('template/head.php',array('css'=> $css, 'metatags'=> $metatags)) ?>
<?= $this->extend('template/header.php') ?>
<?= $this->extend('template/navbar.php') ?>

<?= $this->section('content')?>
<?= $this->endSection()?>

【问题讨论】:

  • 您能否发布您的整个库代码?还发布您如何加载视图
  • 编辑帖子并添加信息
  • 错误来自“Traducao”类,所以你能用那个特定的库类更新你的帖子吗?

标签: php codeigniter codeigniter-4


【解决方案1】:

简短的回答是它在视图中不存在,因为您从未将它提供给视图。

$this-&gt;traducao 属于控制器。它可能是使用 Controller 构建的,但没有直接的理由让任何 View 都可以访问它(或任何未直接传递给 View 的数据)。

所有传入的请求都应该通过控制器进行路由;这是他们最重要的目的。实际处理对您的index.php 文件的请求的控制器在哪里?

任何和所有视图都应该由控制器显示,因为 是您可以将数据(即$this-&gt;traducao)传递到视图的地方。

如果这实际上是 CI4 标记,那么您仍然存在 CI3 代码的问题;例如,$this-&gt;output 在 CI4 中不用于返回控制器响应,而是使用 $this-&gt;response。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多