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

rotas

Estou criando uma aplicação e meu front-end esta tudo ok.. Tenho trabalhado no meu admin... e ai esta a minha duvida.. Criei um layout para o meu admin (admin.ctp) e estou usando esse layout nos meus controllers

$this->viewBuilder()->layout('admin');

mas minhas rotas estao meio atrapalhadas.. por exemplo: para acessar o meu administrador é: localhost/sistema/admin (Criei um Controller Admin)

mas quando fiz o controller para os usuarios minha rota esta assim localhost/sistema/users

pra mim o correto era minhas URL ficarem todas assim: localhost/sistema/admin localhost/sistema/admin/users localhost/sistema/admin/turmas

Tem alguma configuração q tenha q fazer pra separar as rotas do front do back-end?

6 respostas
solução!

Oi Janai =)

Uma parte do framework é feita só para rotas:

https://book.cakephp.org/3.0/en/development/routing.html

No caso de queremos mudar os nomes das nossas rotas, a gente pode dar um nome e mapear elas:

Router::connect('/admin/user', ['controller' => 'User, 'action' => 'index']);

Nessa linha, a gente ta dizendo que a rota /admin/user vai bater no controller User e na action index =)

Analogamente, você pode fazer isso para todas as ruas rotas do UserController.

Exemplos mais robustos, com passagem de parametros e etc, você pode encontrar no link acima da documentação.

Qualquer dificuldade, compartilha com a gente =)

Abraço e bons estudos.

Ve se eu entendi.. o meu front ja busca as rotas automaticamente da raiz... para que eu possa criar uma rota para o meu / admin vou ter que montar uma rota para cada pagina ? Como por exemplo abaixo (//Rotas para separar o admin):

Router::scope('/', function (RouteBuilder $routes) {

  $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);

//Rotas para separar o admin
    $routes->connect('/admin/', ['controller' => 'Admin', 'action' => 'index', 'index']);
    $routes->connect('/admin/turmas', ['controller' => 'Turmas', 'action' => 'index', 'index']);
    $routes->connect('/admin/turmas/cadastrar', ['controller' => 'Turmas', 'action' => 'cadastrar', 'index']);


   $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);

 $routes->fallbacks(DashedRoute::class);
});
Plugin::routes();

Infelizmente esse é o jeito que o framework trabalha mesmo... Ele gera automaticamente as rotas pelo nome do controller e do método. Se a gente quer mudar esse padrão, no cake, a gente precisa descrever na mão mesmo =/

Criei as Rotas do meu TurmasController editei os meus links nas views e na minha navbar.. so que os links dos métodos excluir e editar estão dando erro... tenho q alterar alguma coisa neles já que eles passam o parametro id?

Abaixo as rotas q criei para o controller, o método e o link

//Rotas Admin
    $routes->connect('/admin/', ['controller' => 'Admin', 'action' => 'index', 'index']);
    $routes->connect('/admin/turmas', ['controller' => 'Turmas', 'action' => 'index', 'index']);
    $routes->connect('/admin/turmas/cadastrar', ['controller' => 'Turmas', 'action' => 'cadastrar', 'index']);
    $routes->connect('/admin/turmas/editar', ['controller' => 'Turmas', 'action' => 'editar', 'index']);
    $routes->connect('/admin/turmas/excluir', ['controller' => 'Turmas', 'action' => 'excluir', 'index']);
 public function editar($id){
        $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable->get($id);
        $this->set('turma', $turma);

        $this->render('cadastrar');
    }
<?= $this->Html->link('<i class="fa fa-edit"></i>', ['controller' => '/admin/turmas', 'action' => 'editar', $turma['id_turma']], ['class'=>'btn btn-primary', 'escape' => false]); ?>

Consegui!

$routes->connect('/admin/turmas/editar/:id', ['controller' => 'Turmas', 'action' => 'editar', 'index'],['id' => '\d+', 'pass' => ['id']]);

Só me diz uma coisa.. se tiver 20 controllers vou ter q fazer rota por rota? rsrs

Parabéns Janai, fico feliz que tenha conseguido =)

Quanto as rotas, o mapeamento na documentação é feito uma por uma mesmo... Mas, conseguimos dar apelidos(alias) pros nossos controllers, assim podemos acessar qualquer rota daquele controller a partir do apelido que damos. Algo como:

$routes->connect(
    '/usuario/:action/*', ['controller' => 'Users']
);

Aqui estamos dizendo que qualquer action vinda do prefixo /usuario/ será direcionada para o controller Users =)

Espero ter ajudado.

Abraço e bons estudos!

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