Solucionado (ver solução)
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.