Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro ao usar Currency_helper

Obtive o seguinte erro ao rodar o código:

Fatal error: Uncaught Error: Call to undefined function numeroEmReais() in C:\xampp\htdocs\Alura\CodeIgniter\mercado\application\views\produtos\index.php:13 Stack trace: #0 C:\xampp\htdocs\Alura\CodeIgniter\mercado\system\core\Loader.php(834): include() #1 C:\xampp\htdocs\Alura\CodeIgniter\mercado\system\core\Loader.php(420): CI_Loader->_ci_load(Array) #2 C:\xampp\htdocs\Alura\CodeIgniter\mercado\application\controllers\produtos.php(13): CI_Loader->view('produtos/index....', Array) #3 C:\xampp\htdocs\Alura\CodeIgniter\mercado\system\core\CodeIgniter.php(360): Produtos->index() #4 C:\xampp\htdocs\Alura\CodeIgniter\mercado\index.php(202): require_once('C:\\xampp\\htdocs...') #5 {main} thrown in C:\xampp\htdocs\Alura\CodeIgniter\mercado\application\views\produtos\index.php on line 13

Como proceder?

5 respostas

Oi João, parece que sua função numeroEmReais não existe ou está com outro nome talvez. Você pode postar o código do produtos\index.php aqui pra gente ver?

Olá Wanderson Segue o código produtos.php

<?php
class Produtos extends CI_Controller
{
    public function index()
    {

        $this->load->database();
        $this->load->model("produtos_model");
        $produtos = $this->produtos_model->buscaTodos();
        $this->load->helper("url");
        $this->load->helper("currency");
        $dados = array("produtos" => $produtos);
        $this->load->view("produtos/index.php", $dados);
    }


}

Fiquei com duvida na seguinte linha:

$this->load->helper("currency");

Porque eu não preciso escrever desta forma?

$this->load->helper("currency_helper");

Codigo do Currency_Helper

<?
function numeroEmReais($numero) {
    return "R$ " . number_format($numero, 2, ",", ".");
}

Outra coisa, aproveitando o tópico. Estou usando o sublime como editor. Existe algum plugin ou alguma IDE que permita o autocompletar no código php? Como é feito no Visual Studio e Eclipse?

Desde já obrigado

João, desculpa, passei o arquivo errado pra você mandar, quer ver a view em: views\produtos\index.php, posta ela por favor?

Você não precisa usar o _helper quando está carregando o Helper por que o CodeIgniter já sabe e espera que o nome do arquivo tenha esse sufixo.

O sublime já faz autocomplete do PHP por padrão a não ser que você a tenha desativado. Porém, acho que existem sim plugins. Vale dá uma pesquisada (https://packagecontrol.io/search/PHP)

<html lang="en">
    <head>
        <link rel="stylesheet" href="<?= base_url("css/bootstrap.css")?>">
    </head>

    <body>
        <div class="container">
            <h1>Produtos</h1>
            <table class="table">
                <?php foreach ($produtos as $produto): ?>
                    <tr>
                        <td><?= $produto["nome"]?></td>
                        <td><?= numeroEmReais($produto["preco"])?></td>
                    </tr>    
                <?php endforeach ?>
            </table>
        </div>
    </body>


</html>

Segue o views\produtos\index.php.

Então o Sublime possui um auto completar. Mas achei ele fraco. Por exemplo, existe uma forma de ele perceber um objeto de outro arquivo e detectar isso? Seja erro de digitação ou uma inclusão errada? O Eclipse reconhece isso para gente no Java.

Att. Joao

solução!

João, o que está me parecendo é que o Currency_Helper não está na pasta onde o CodeIgniter procura os helpers, onde este arquivo está (o caminho da pasta)?

O Eclipse é uma IDE completa que suporte a linguagem java a muito tempo, o Sublime é só um editor de texto com alguns "superpoderes". Caso queira algo que se compare ao Eclipse pro PHP, sugiro o PHPStorm. Porém você pode procurar algum plugin no link que já passei no post acima e vê se atente a suas necessidades.

Comparar o Eclipse pro Java com o Sublime é injusto por que por baixo dos panos o Eclipse faz muito mais do que apenas completar o código pra você. Ele chega seu código com o compilador, coisa que o sublime não tem o propósito de fazer.