[Laravel] Criar um select de Cidade/UF utilizando o artesaos/cidadesbr

Olá! Você já precisou de adicionar no seu formulário HTML um campo que permite o usuário escolher uma cidade em um select box? Muito provável que você pensou em fazer isso de forma dinâmica onde, o usuário seleciona um estado e “automagicamente” as cidades aparecem no campo ao lado..

Pois então.. Nesse post pretendo mostrar como fazer algo parecido utilizando o laravel e package artesaos/cidadesbr. O resultado final será este:

 

1º) Acesse o diretório do seu projeto Laravel e adicione o package utilizando o composer. Segue o comando:
composer require artesaos/cidadesbr

2º) Acesse o arquivo config/app.php  e adicione o provider:

3º) Agora você vai precisar importar os arquivos que cria a tabela cidade (migration) e insere os dados (seeder). Para isso execute o comando:

4º) Aplique os arquivos importados:

Segue código da view usado no exemplo acima. Basta você customizar na sua aplicação.

Dúvidas? Comente!

  • mlops

    muito bom.. Obrigado

  • Rodrigo Marques

    Boa Noite Jansen Felipe,

    Estou tentando fazer os passos sugeridos a cima para poder ter esses dois select no meu projeto, entretanto, quando vo realizar o 3º passo, ele me da o seguinte erro no composer:

    [SymfonyComponentDebugExceptionFatalErrorException] Class ‘ArtesaosProvidersCidadesServiceProvider’ not found

    Saberia aonde eu possa ter errado no processo?

    Muito Obrigado

    Rodrigo Marques

    • Olá Rodrigo Marques

      Por um problema, as barras tinham truncado. Corrigi o post! 🙂

      Tenta assim: ArtesaosProvidersCidadesServiceProvider

      • Rodrigo Marques

        Bom Dia Jansen Felipe,

        Muito obrigado pela ajuda, com a correção consegui realizar o procedimento aqui. Uma dúvida, sabe como eu faço para colocar o selecione no campo do estado?

        Muito Obrigado
        Rodrigo Marques

        • Remova o parametro “default” do select “uf” e adicione uma option “Selecione”. Acho que vai dar certo! 😉

          • Rodrigo Marques

            Boa Tarde Jansen Felipe,

            Mais uma vez venho aqui agradecer a grande ajuda que está me dando. Tenho mais uma perguntinha sobre o select.Quando eu vo salvar o estado e a cidade no banco, o estado ele salva com a sua respectiva sigla, so que a cidade ele salva com o numero do banco. Teria como preencher os value da cidade com o nome de cada cidade ou o melhor seria fazer uma chave estrangeira com a tabela onde tem os dados?

            Muito Obrigado
            Rodrigo Marques

          • Eu sugiro fazer uma chave estrangeira com a tabela onde tem os dados. Mas se ainda quiser o value do como o nome da cidade, tem jeito. Basta alterar na linha 47 do script.js:
            https://github.com/artesaos/cidadesbr/blob/master/public/js/scripts.js#L47

            🙂

  • Bruno Martins

    Boa Tarde Felipe, estou tentado utilizar os metodos para auxiliar no desenvolvimento de uma aplicação porém não estou conseguindo no passo 3 da este erro.
    [ÍnvalidArgumentException]
    There are no commands defined in the vendor namespace

  • Alexandre LM

    Olá, essa versão é compatível com o Laravel 5.1?

    • Olá!

      É sim!

      • Alexandre LM

        Já funcionou, obrigado!

  • Fernando Rogerio

    Olá, tentei utilizar e o select “uf” não é populado, analisando o console do Chrome percebi um erro de rota, mas não consegui resolver.

    Erro: GET http://localhost:8000/cidades/ 404 (Not Found)

  • Fernando Rogerio

    Consegui fazer funcionar, porém não consegui fazer funcionar na view “editar”.
    O valor que eu informo como default no Form Model Binding, retornado do controller, é ignorado trazendo para a view apenas o ajax.
    Alguém teve esse problema? Pode ajudar?

  • Misael Soler

    Amigo, consegui fazer, mas apenas offline. Quando coloco tudo online, os combos não são carregados. Pode me ajudar?

  • Misael Soler

    Velho… to com um erro estranho pra caramba… não sei pra onde correr… quando carrega a página, a primeira vez o select é carregado, mas quando mudo o estado, o select da cidade não muda… e no console aparece estes erros:

    Uncaught TypeError: $(…).cidades is not a function
    at Object.onChange (adicionar:591)
    at HTMLSelectElement. (scripts.js:23)
    at HTMLSelectElement.dispatch (jquery-1.11.3.min.js:4)
    at HTMLSelectElement.r.handle (jquery-1.11.3.min.js:4)

    Mas o nome da função, o link, ta tudo certo!

  • Izaias Rios Sardinha

    Estou tentando usar esse exemplo usando o adminlte -> https://adminlte.io/themes/AdminLTE/index2.html colocando os //code.jquery.com/jquery-1.11.3.min.js
    /vendor/artesaos/cidades/js/scripts.js e o no
    $(‘#uf’).ufs({
    onChange: function(uf){
    $(‘#cidade’).cidades({uf: uf});
    }
    });
    arquivo admin.blade.php
    e fazendo a chamada pelo

    @yield(‘conteudo’)

    a pagina que possui os
    mas não está funcionando poderia ajudar?
    https://uploads.disquscdn.com/images/a8bba8956f500784b8f331b80064b83d04a801a352c07882db2c850f5632c24d.jpg

  • Izaias Rios Sardinha

    Resolvido, copiei o script /vendor/artesaos/cidades/js/scripts.js para a pasta public do laravel e coloquei as chamadas http://asset('js/jQuery-2.1.4.min.js&#039😉

    http://asset('js/scripts_cidade.js&#039😉
    depois do @section(‘conteudo’) da página que quero chamar!
    Vlw pela ajuda

  • Lara Gallassi

    Os selects funcionam, mas quando clico pra criar o registro do usuário não tá pegando os campos de uf e cidade, estou fazendo algo errado?

  • Lara Gallassi

    E quando eu deixo um estado de default e seleciono outro estado ele não muda o campo de cidades, e se eu deixo sem default ele pega o Acre!