Codeigniter 4对null的成员函数get()的调用



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

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

我的视图不起作用,请致电$this->traducao->get('search_string'(;请帮我更新课堂和图书馆的

我在库中的功能

<?php
namespace AppLibraries;
use ConfigDatabase;

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 CodeIgniterHTTPURI();
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 AppControllers;
use CodeIgniterController;
use AppLibrariesMy_parser;
use AppLibrariesPreferencia;
use AppModelsindex_model;
use AppLibrariesTraducao;
use AppLibrariesMenus;
class BaseController extends Controller
{
protected $helpers = [];
public function initController(CodeIgniterHTTPRequestInterface $request, CodeIgniterHTTPResponseInterface $response, PsrLogLoggerInterface $logger)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
$this->_db = ConfigDatabase::connect();
$this->My_parser = new My_Parser();
$this->_model = new AppModelsindex_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()?>

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

$this->traducao属于控制器。它可能是用控制器构建的,但没有立即的原因表明任何视图都可以访问它(或任何未直接传递给视图的数据(。

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

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

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

在CI4模型调用中调用会话时,我也面临同样的错误。

Solution :
1. define initialize at the top and inside your class.
Screenshot : https://prnt.sc/7-SEckc5XDh9
EX. protected $db;
protected $session;
protected function initialize()
{
$this->session = session();
$this->db = db_connect('default');
}
2. calling step:
syntax : `your protected table`->`method name('string')
EX : $this->session->get('site_language_name')

最新更新