6
respostas

Erro na classe produto

Bom, eu segui exatamente as instruções do model, mas mesmo assim por alguma razão o código está encontrando a classe mesmo salvando na pasta app e ainda assim o meu código está igualzinho?? então aonde está erro que eu não estou vendo?

https://imgur.com/a/dMMf4

6 respostas

Oi Bruno, tudo bom?

Compartilha com a gente sua classe Produto. Talvez seja um detalhe na declaração do namespace dela.

Aguardo retorno.

Abraço

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model
{
    protected $table = 'produtos';
    public $timestamps = false;

    protected $fillable = array('nome','descricao','valor','quantidade');

    protected $guarded = ['id'];
}

Eu criei essa classe pelo Model e salvei no diretório app

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model { protected $table = 'produtos'; public $timestamps = false;

protected $fillable = array('nome','descricao','valor','quantidade');

protected $guarded = ['id']; } Eu criei essa classe pelo Model e salvei no diretório app

Estranho, já tentou o namespace refletindo a estrutura de pastas? algo como:

<?php
namespace estoque;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model
{
    protected $table = 'produtos';
    public $timestamps = false;

    protected $fillable = array('nome','descricao','valor','quantidade');

    protected $guarded = ['id'];
}

Além disso, sempre joga a linha do namespace pra baixo da declaração da tag php. as vezes o interpretador não encontra a declaração do namespace quando não damos esse espaço.

Qual versão do laravel você está utilizando? Confere pra mim no seu composer.json =)

Se você quiser, compartilha o código em algum repositorio. Assim, a gente consegue dar uma olhada na configuração do autoloader do composer pra garantir que o arquivo será encontrado.

Abraço

Ta aí o repositório https://github.com/brunopeople/Praticando_Laravel

Opa, dando uma olhada no seu composer.json, o processo de autoload está rolando a partir da pasta "app/" com o namespace "App\":

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }

Então para qualquer classe ser encontrada, basta estar na pasta app/diretorio com o namespace App\diretorio.

Acho que o unico ponto que pode influenciar aqui mesmo é o enter no namespace (já passei por isso algumas vezes):

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use estoque\Produto;
use Request;

class ProdutoController extends Controller {

Já tentou esse espaçamento?

Além disso, o use da classe Produto me parece incorreto.

Seguindo o padrão de autoload estabelecido, devemos usar "App\Produto" para importar a classe ao invés de "estoque\Produto":

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Produto;
use Request;

class ProdutoController extends Controller {

A classe User, por exemplo, não tem nenhum ponto a acrescentar:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
}

O espaçamento e os uses parecem estar de acordo com o autoloader =)

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software