Jump to content
Marcosvn

URL dinâmica no laravel

Recommended Posts

Estou trabalhando em um projeto de sites para escritores. Nesse projeto existem 12 gêneros dentro da tabela "categorias", por exemplo: Poemas, Acrósticos, Crônicas, etc.

 

Estou com problemas para criar as rotas para os gêneros corretamente. Vamos supor que um usuário publique um texto do gênero Acrósticos com título: Flores do campo.

 

A URL está sendo gerada assim: site.com/Acrósticos/flores-do-campo/

 

Mas eu nao quero que as categorias venham com letra maiscula e acentos na url, fora em outras partes do site. Sendo assim, qual melhor método pra resolver essa situação ?

 

Criar 12 rotas para cada categoria e puxar apenas o slug do titulo dinamicamente ? ou remover os acentos e letras maisculas na hora de gerar a URL ?

Share this post


Link to post
Share on other sites
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('teste',[App\Http\Controllers\ControllerTeste::class,'teste']);

app/Http/Controllers/ControllerTeste.php
<?php
namespace App\Http\Controllers;
class ControllerTeste extends Controller {
    public function teste(){
        return createURL('Acrósticos','Flores do campo');}}

app/Helpers.php
<?php
use Illuminate\Support\Str;
function createURL($genre,$title){
		return Str::slug($genre) . "/" . Str::slug($title);}

A função createURL retira os acentos e coloca tudo em minúsculo. No código acima, depois de digitar localhost:8000/laravel/teste, o resultado é esse: acrosticos/flores-do-campo.

Faz tempo que eu criei o arquivo helpers.php, mas acredito que basta usar apenas uma vez  o comando composer dump-autoload para o arquivo helpers fazer parte do projeto.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
    • By ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • By gersonab
      Como faço para destruir uma session quando a modal for fechada, esta foi criada na mesma.
       
      Favor desconsiderar esta, estava com problema de cache
       
    • By ThalissonChagas1407
      Boa tarde.
      Eu tenho o seguinte objeto em arrray
      Array ( [0] => stdClass Object ( [produto] => 000001 [var1] => LR [var2] => G [var3] => [codproduto] => 000001LRG [estoque] => 4.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [1] => stdClass Object ( [produto] => 000001 [var1] => AZ [var2] => G [var3] => [codproduto] => 000001AZG [estoque] => -4.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [2] => stdClass Object ( [produto] => 000001 [var1] => VD [var2] => G [var3] => [codproduto] => 000001VDG [estoque] => 0.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [3] => stdClass Object ( [produto] => 000001 [var1] => BR [var2] => G [var3] => [codproduto] => 000001BRG [estoque] => 17.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [4] => stdClass Object ( [produto] => 000001 [var1] => VR [var2] => G [var3] => [codproduto] => 000001VRG [estoque] => 0.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [5] => stdClass Object ( [produto] => 000001 [var1] => PT [var2] => G [var3] => [codproduto] => 000001PTG [estoque] => 5.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [6] => stdClass Object ( [produto] => 000001 [var1] => AM [var2] => G [var3] => [codproduto] => 000001AMG [estoque] => 1077.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [7] => stdClass Object ( [produto] => 000001 [var1] => BR [var2] => M [var3] => [codproduto] => 000001BRM [estoque] => 17.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [8] => stdClass Object ( [produto] => 000001 [var1] => AZ [var2] => M [var3] => [codproduto] => 000001AZM [estoque] => 15.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [9] => stdClass Object ( [produto] => 000001 [var1] => PT [var2] => M [var3] => [codproduto] => 000001PTM [estoque] => 5.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) [10] => stdClass Object ( [produto] => 000001 [var1] => AM [var2] => M [var3] => [codproduto] => 000001AMM [estoque] => 22.0000 [codigo] => 000001 [descricao] => Produto de teste [categoria] => [unidade] => UN [custo] => 0.5400 [fornecedor] => 4 [sigla] => [catdesc] => ) ) Gostaria de agrupar o produto e a var1;
       
      o Resultado dessa forma.
       
      Array ( [000001] => Array ( [LR] => Array ( [P] => 4 [M] => 3 [G] => 2 ) [PT] => Array ( [P] => 4 [M] => 3 [G] => 2 ) ) ) seria possivel agrupar?
    • By gersonab
      Boa tarde a todos, gostaria de aplicar uma classe a uma determinada informação, não estou conseguindo, busco no BD a hora do cadastro, faço a diferença com a hora atual, até aí trq, só não consigo aplicar a classe.
      <?php $horapf = $linha['horapf']; $horaatual = date("H:i:s"); $entrada = DateTime::createFromFormat('H:i:s', $horapf); $saida = DateTime::createFromFormat('H:i:s', $horaatual); $maisq = '00:30:00'; $menosq = '00:40:00'; $intervalo = $entrada->diff($saida); $intervalo->format('%H:%I:%S'); if($maisq <= $intervalo && $intervalo < $menosq){ $clss = 'class="btn btn-xs btn-outline-warning"'; } elseif ($intervalo >= $menosq){ $clss = 'class="btn btn-xs btn-outline-danger"'; } else { $clss = 'class="btn btn-xs btn-outline-info"'; } mesmo se retirar esta linha ----->  $intervalo->format('%H:%I:%S');
       
      para sempre no primeiro, independente do tempo btn-outline-warning
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.