Skip to content

Instantly share code, notes, and snippets.

@patrickmaciel
Last active September 30, 2020 20:27
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save patrickmaciel/8558292 to your computer and use it in GitHub Desktop.
Save patrickmaciel/8558292 to your computer and use it in GitHub Desktop.
Como configurar prefixos e rotas administrativas (autenticadas ou não) no Laravel 4.x #laravel #php

Exemplo rápido e prático

Prefixos no Laravel 4.x

Configure suas rotas:

No meu caso, a melhor maneira que encontrei foi a seguinte:

/* -----------------------------------------------------------------------
| Admin Routes
| ------------------------------------------------------------------------
|
| Rotas administrativas. Login necessário
|
*/
Route::group(array('prefix' => 'admin', 'before' => 'auth'), function() {
  Route::controllers(array(
    'users' => 'Admin\UserController',
    '/' => 'Admin\AdminController'
  ));

  Route::get('/users', array('as' => 'admin.users', 'uses' => 'Admin\UsersController@index'));
  Route::get('/users/create', array('as' => 'admin.users.create', 'uses' => 'Admin\UsersController@create'));
  Route::post('/users/store', array('as' => 'admin.users.store', 'uses' => 'Admin\UsersController@store'));
  Route::get('/users/show/{id}', array('as' => 'admin.users.show', 'uses' => 'Admin\UsersController@show'));
  Route::get('/users/edit/{id}', array('as' => 'admin.users.edit', 'uses' => 'Admin\UsersController@edit'));
  Route::post('/users/update/{id}', array('as' => 'admin.users.update', 'uses' => 'Admin\UsersController@update'));
  Route::delete('/users/destroy/{id}', array('as' => 'admin.users.destroy', 'uses' => 'Admin\UsersController@destroy'));

  Route::get('/', array('as' => 'admin', 'uses' => 'Admin\AdminController@index'));

});

Resumindo o que foi feito acima:

Route::group(array('prefix' => 'admin', 'before' => 'auth'), function() {

Nesta linha eu disse que o prefixo para as rotas deste grupo é admin, e que será necessário efetuar o login - auth.

  Route::controllers(array(
    'users' => 'Admin\UserController',
    '/' => 'Admin\AdminController'
  ));

No trecho de código acima, eu configurei os Resource Controllers (RESTful Controllers) desejados, neste caso, já configurando com isso suas rotas segundo a metodologia REST.

A chave do array, será o nome do resource e consequentemente da rota (site.com/admin/users/create).

A chave /, é responsável pela rota padrão site.com/admin.

Mas como você notou, eu também setei cada rota manualmente abaixo. Porque eu fiz isso? Para utilizá-las como Named Routes. Com isso, caso um dia eu resolva que o UsersControllers será agora o WhateverController, não irá impactar nas rotas do sistema. Sendo assim:

  Route::get('/users', array('as' => 'admin.users', 'uses' => 'Admin\UsersController@index'));
  Route::get('/users/create', array('as' => 'admin.users.create', 'uses' => 'Admin\UsersController@create'));

O que fiz aqui foi criar uma rota da maneira que eu desejei, e setar o as com nome mais apropriado, neste caso, seguindo a lógica resource.nome_da_action, e após informando o prefix\controller@action.

Obs.: caso no seu controller haja rotas foras do padrão REST, neste caso você utilizando ou não Named Controllers deve criá-las manualmente:

Diretórios & Namespaces

Configurando os prefixos desejados dentro do seu arquivo routes.php, você deve criar as pastas, seguindo os mesmos nomes, como por exemplo:

  • app/controllers/Admin
  • app/controllers/Painel
  • app/controllers/Cliente

O nome da pasta, de preferência deve estar em maiúsculo, e assim sendo o namespace também (na segunda linha do seu arquivo controller, logo abaixo de <?php):

  • namespace Admin;
  • namespace Painel;
  • namespace Cliente;

Controllers

Criando o seu controller dentro de app/controllers/SEU_PREFIXO/SEU_CONTROLLER.php, você deve ter algo como:

<?php
namespace Admin;

class UserController extends \BaseController {

  /**
   * Display a listing of the resource.
   *
   * @return Response
   */
  public function getIndex()
  {

    $users = \User::getAll();

    return \View::make('admin.user.index')
      ->with('title', 'Usuários')
      ->with('users', $users);
  }

Observações do código acima

BaseController agora deve ter o \, antes dele, significando com isso, que você está utilizando o BaseController principal (da raiz), e não o Admin\BaseController.

Model, e qualquer outra classe, lib, plugin, que você utilizava nos controllers principais, diretamente, agora devem ter o \ antes.

Se não quiser fazer isso (que é uma tarefa, até um pouco desgastante para alguns), você pode importar tudo no inicio do arquivo, seguindo o padrão:

use App\Services\Validators\Admin\UserValidator;

E então basta chamar diretamente: UserValidator::metodo(). Se não fizesse isso, você teria que fazer assim: App\Services\Validators\Admin\UserValidator::metodo();. Viu a diferença?

Como podem ver, não tenho tamanho conhecimento teórico quanto a namespaces, porém, o básico para entender como funciona, está acima.

Pronto!!

Seguindo as dicas acima, você conseguirá configurar os prefixo (autenticados ou não) no seu projeto utilizando Laravel 4.

Espero ter ajudado.

Atenciosamente, Patrick Maciel.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment