Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
25
respostas

Aula 04 - Autenticação - HomeController

Quando estou acessando o localhos:8000\home está dando o seguinte erro:

ReflectionException in Route.php line 280:
Class estoque\Http\Controllers\HomeController does not exist

Seria porque não existe esse arquivo no meu projeto?

Como posso resolver?

25 respostas
solução!

Alguém pode me ajudar? Porque para prosseguir no curso e testar as demais aplicações que estou vendo nas aulas seguintes, preciso me logar ^^ Como não estou tendo acesso a pagina de registro devido a esse problema, não consigo visualizar as paginas.

Segues os codigo do route e Scaldfoder.....

<?php

Route::get('/produtos', 'ProdutoController@lista');

Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra');

Route::get('/produtos/remove/{id}', 'ProdutoController@remove');

Route::get('/produtos/novo', 'ProdutoController@novo');

Route::post('/produtos/adiciona', 'ProdutoController@adiciona');

Route::get('/login', 'LoginController@form');
Route::post('/login', 'LoginController@login');

Route::get('home', 'Bestmomo\Scafold\Http\Controllers\HomeController@index');

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
    ]);
<?php namespace Bestmomo\Scafold;

use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\AliasLoader;

class ScafoldServiceProvider extends ServiceProvider
{

    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = false;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {
        // Get namespace
        $nameSpace = $this->app->getNamespace();

        // Set namespace alias for HomeController
        AliasLoader::getInstance()->alias('AppController', $nameSpace . 'Http\Controllers\Controller');

        // Routes
        $this->app->router->group(['namespace' => $nameSpace . 'Http\Controllers'], function()
        {
            require __DIR__.'/Http/routes.php';
        });

        // Views
        $this->publishes([
            __DIR__.'/../views' => base_path('resources/views'),
            __DIR__.'/../views/auth' => base_path('resources/views/auth'),
            __DIR__.'/../views/emails' => base_path('resources/views/emails'),
        ]);
    }

    public function register() {}

}

Oi Eriverton

suas classes estão dentro do namespace Http\Controllers\Controller mesmo?

você não modificou pra estoque ou algum outro?

Rodrigo, estão em Http\Controllers\Controller mesmo, porém percebo que não tem o arquivo HomeController ^^ ele era para vir padrão do Laravel?

Nas primeiras aulas tem aquele comando do artisan para modificar o namespace para estoque mais não ficou a pasta estoque.

Oi Eriverton

Experimente rodar o comando artisan make:auth no seu terminal, na pasta do projeto.

Parece que para a versão que você está usando, você precisa rodar esse comando pra ele criar o controller e as views.

Feito isso, procure pela classe HomeController e confere se o namespace está igual ao das demais classes de sua aplicação. Por exemplo, se no início do projeto você mudou o namespace para estoque, você precisará mudar de App\Http\Controllers para estoque\Http\Controllers.

Bom dia Rodrigo Turini,

Pronto realizei o procedimento que informou e já apareceu o HomeController com namespace estoque\Http\Controllers e já apareceu a pagina de login e registro.

Agora o problema que deu foi quando eu preenchi os dados para registro.

Apareceu essa msg

NotFoundHttpException in RouteCollection.php line 161:

Então fui lá no arquivo RouteCollection mais não entendi ^^

Ah Rodrigo e agora quanto tento acessar a pagina de que aparece os produtos e cadastrar novos aparece essas mensagens:

listagem de produto:

ErrorException in 579200f685a2606be930a7baa89ac18efcb03b75.php line 12:
Trying to get property of non-object (View: C:\XAMP\htdocs\estoque\resources\views\listagem.blade.php)

Cadastrar novos produtos:

FatalErrorException in 046ac4f7cd8d5a170134b0f13f38bb81d978b731.php line 42:
syntax error, unexpected '?>'

Observação, apesar de dar um erro na parte do registro, o registro é feito, pois quando acesso novamente a pagina de login ele já me aparece logado, porém não consigo acessar as paginas pois da o erro descrito acima.

Algum retorno? Alguém que possa me ajudar?

Olá, tive o mesmo problema que você Eriverton. Rodei o comando que o Rodrigo postou artisan make:auth passou a funcionar. Ai nos exercicios pediu para adicionar no menu do principal.blade.php o caminho Login no qual tive que alterar para /login. Segue meu codigo para você dar uma olhada... Routes.php

<?php

Route::get('/', 'ProdutoController@lista');

Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra');
Route::get('/produtos/remove/{id}', 'ProdutoController@remove');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::post('/produtos/adiciona', 'ProdutoController@adiciona');
Route::get('/produtos/json', 'ProdutoController@listaJson');
Route::get('/login', 'LoginController@form');
Route::post('/login', 'LoginController@login');


Route::auth();

Route::get('/home', 'HomeController@index');

ProdutoController.php

<?php
  namespace estoque\Http\Controllers;

use estoque\Http\Requests\ProdutosRequest;
use estoque\Produto;
use Illuminate\Support\Facades\DB;
use Request;
use Auth;


class ProdutoController extends Controller {

    public function __construct()
     {
       $this->middleware('auth');
     }

Principal.blade.php


</head>
<body>
  <div class="container">

  <nav class="navbar navbar-default">
    <div class="container-fluid">

    <div class="navbar-header">
      <a class="navbar-brand" href="/produtos">Loja</a>
    </div>

      <ul class="nav navbar-nav navbar-right">
        @if (Auth::guest())
          <li><a href="/login">Login</a></li>
          <li><a href="/register">Registrar</a></li>
       @else
          <li>{{ Auth::user()->name }} </li>
          <li><a href="/logout">Sair</a></li>
       @endif
          <li><a href="/produtos">Listagem</a></li>
          <li><a href="/produtos/novo">Novo</a></li>
      </ul>

    </div>
  </nav>

    @yield('conteudo')

Espero que te ajude.

Marlon Boa noite, voce está em qual aula? Porque seus codigos estão um pouco diferente do meu. ^^

Marlon, acho que o problema é outro. Muito obrigado pela força amigo.

Se mais alguem puder ajudar agradeço.

Oi Eriverton

Pode nos passar o código do seu controller e da view?

e pra ajudar, experimente dar um dd() ou var_dump() nos valores que o BD está retornando pra conferir que o resultado é exatamente o que esperamos?

Seriam esses que deseja?

View:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */

    'paths' => [
        realpath(base_path('resources/views')),
    ],

    /*
    |--------------------------------------------------------------------------
    | Compiled View Path
    |--------------------------------------------------------------------------
    |
    | This option determines where all the compiled Blade templates will be
    | stored for your application. Typically, this is within the storage
    | directory. However, as usual, you are free to change this value.
    |
    */

    'compiled' => realpath(storage_path('framework/views')),

];

Controller:

<?php

namespace estoque\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;

class Controller extends BaseController
{
    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;
}

Rodrigo, o problema é que agora que fiz o comando artisan make:auth e apareceu a pagina de login e registro padrão do laravel, nenhuma pagina agora está exibindo mais nada. Da os erros que descrevi ali em cima.

Oi Eriverton

pode mandar o seu ProdutoController?

e em qual página dá erro? todas? se sim, manda o html de alguma delas que você está tentando abrir e recebendo o erro? por exemplo, se ao abrir a listagem de produtos você recebe erro, posta o código do seu arquivo listagem.blade.php

Então Rodrigo é assim, antes de realizar o comando artisan make:auth eu estava sendo direcionado para pagina que criamos de login nas aulas seguintes, depois que fiz o comando fui direcionado para a pagina de login padrão do laravel e realizei o meu registro, porém quando cliquei em registrar apareceu o erro 01, depois eu percebi que mesmo assim o registro de acesso foi realizado, pois quando tento acessar o home, ele aparece logado. Então fui tentar abrir a pagina produtos onde tem a listagem e apareceu o erro 02 e nas demais pagina também da erro. Ah tem um erro quando faço o login também. Deu para entender? Porque realmente e muita coisa.

Antes de fazer as registrações de acesso a listagem estava executando normalmente.

Erro 01

NotFoundHttpException in RouteCollection.php line 161:

Erro 02

ErrorException in 579200f685a2606be930a7baa89ac18efcb03b75.php line 12:
Trying to get property of non-object (View: C:\XAMP\htdocs\estoque\resources\views\listagem.blade.php)

Erro quando realizo o login

NotFoundHttpException in RouteCollection.php line 161:

ProdutoController:

<?php namespace estoque\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Request;
use estoque\Produto;
use Validator;
use estoque\Categoria;
use estoque\Http\Requests\ProdutoRequest;
use Auth;

class ProdutoController extends Controller {

        public function __construct()
    {
        $this->middleware('autorizador');
    }

    public function lista(){
        $produtos = Produto::all();
        return view('listagem')->with('produtos', $produtos);
    }

    public function mostra($id){
            $produto = Produto::find($id);
        return view ('detalhes')->with('p', $produto);
    }

      public function remove($id){
            $produto = Produto::find($id);
            $produto->delete();
            return redirect('/produtos');
    }

    public function novo(){
        return view ('formulario')->with('categorias', Categoria::all());
    }

     public function adiciona(ProdutoRequest $request){
        Produto::create($request->all());
        return redirect('/produtos')->withInput();
}

}

Listagem.blade

@extends('principal')

@section('conteudo')
<h1> Listagem de produtos com Laravel </h1>

<table class="table">
    <?php foreach ($produtos as $p): ?>
    <tr>
        <td> <?= $p->nome?> </td>
        <td> <?= $p->valor?> </td>
        <td> <?= $p->descricao?> </td>
        <td> <?= $p->quantidade?> </td>
        <td> <?= $p->tamanho?> </td>
        <td> <?= $p->categoria->nome?> </td>
        <td> <a href="produtos/mostra/<?= $p->id?>"> <span class="glyphicon glyphicon-search" aria-hidden="true"></span> </a> </td>
        <td> <a href="produtos/remove/<?= $p->id?>"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> </a> </td>
    </tr>
    <?php endforeach ?>
</table>

@if(old('nome'))
    <div class="alert alert-success">
    Produto {{old('nome')}} adicionado com sucesso!
    </div>
@endif

@stop

Eriverton. Faz um teste?

Deixa o arquivo listagem.blade.php vazio.. só com um texto "oi" pra ver se o erro acontece dentro dele ou antes mesmo de renderizar a view.

se funcionar, isto é, não der o erro, vai voltando os trechos dele aos poucos até perceber qual linha está dando o erro?

sobre o erro 1, pode mostrar como está o seu arquivo routes.php?

Rodrigo

Realizei o teste no arquivo listagem.blade.php e apareceu sim o ""OI"".

Sobre o erro de registro e login sabe como resolver?

Está ai o routes.php

<?php

Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra');
Route::get('/produtos/remove/{id}', 'ProdutoController@remove');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::post('/produtos/adiciona', 'ProdutoController@adiciona');

Route::get('/login', 'LoginController@form');
Route::post('/login', 'LoginController@login');

Route::get('home', 'Bestmomo\Scafold\Http\Controllers\HomeController@index');
Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
    ]);
Route::auth();
Route::get('/home', 'HomeController@index');

Ah quando tento acessar o link produtos/novo

também da o erro

FatalErrorException in 046ac4f7cd8d5a170134b0f13f38bb81d978b731.php line 42:
syntax error, unexpected '?>'

Não teria os arquivo do curso para que eu possa ir comparando e ver onde estou errando?

Oi Eriverton

Experimente tirar o Route::auth(); do seu arquivo de rotas?

Sobre o teste que pedi no arquivo de listagem, você foi voltando os trechos do arquivo aos poucos pra ver se funciona? por exemplo, volte apenas as primeiras linhas assim:

@extends('principal')

@section('conteudo')
<h1> Listagem de produtos com Laravel </h1>

e confere se funciona.

Vou mandar um email pra alguns moderadores pedindo o projeto completo, assim que me enviarem te aviso.

Rodrigo, desculpa a demora, mais decidi acabar outro curso e voltei agora pra esse.

Então tirei o route::auth(); e agora direciona pro login, porém ao fazer o login não está direcionando para nenhuma pagina e também ainda a pagina de produtos da o mesmo erro.

Acho que vou ter que reiniciar tudo, ficou tudo muito bagunçado o curso com essas divergências de versões do laravel, mais se puder mandar o projeto completo pra mim não reiniciar tudo agradeço.

Oi Eriverton

Eu adicionei alguns passos a mais nos exercícios do curso como uma tentativa mais rápida de resolver esses problemas entre as versões.

Por enquanto não temos o projeto completo, mas nossa equipe de revisão fará em breve, aproveitando pra corrigir todos os problemas que aparecerem no caminho, como esse.

Se você quiser, também pode criar o projeto com a versão 5.0, que foi a que o curso foi gravado.

Você pode fazer isso assim:

composer create-project laravel/laravel nomedoprojeto "5.0."

Certo obrigado.