Jump to content
Marcosvn

[Resolvido] Reservar rotas para nomes de usuario (LARAVEL 5.5) - RESOLVIDO

Recommended Posts

Galera estou fazendo um site no qual o nome de usuario cadastrado servirá de rota. Por exemplo www.site.com/mvnobrega

 

todos os usuarios poderão divulgar seu perfil através do site ''/nome de usuario"

 

qual a melhor maneira de fazer iosso ?

Share this post


Link to post
Share on other sites

Primeiro garantir que o nome de usuário seja único pra não ter duplicada no banco. De resto, pode fazer uma rota normal especificando mais ou menos dessa forma:

 

Route::get('/seusite/{usuario}', 'Controller@Metodo');

 

Na função Metodo você recebe o parâmetro passado e faça uma consulta com FindOrFail pra encontrar o registro.

 

Ps. No Laravel, essas consultas vão sempre procurar por Id e não pelo username que você deseja, então você precisará especificar no seu Model uma função para sobreescrever essa regra, dessa forma:

 

public function getRouteKeyName()
{
    return 'usuario'; // usuario deve ser a coluna que você usará nessa url como parâmetro
}

 

Se não conseguir, poste o que você já tem para tentar lhe ajudar.

 

Abraço.

Share this post


Link to post
Share on other sites

vish cara, ta f*** aqui, e já achei vários artigos. Mas não estou conseguindo entender muito bem oq esatou fazendo. E por fim não resolve.

 

estou colocando assim: 

Route::get('/{username}', 'ProfileController@show');

 E no ProfileController assim:

?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProfileController extends Controller
{
    public function show($username)
    {
        $user = User::whereUsername($username)->firstOrFail();

        return View::make('profile', compact('user'));
    }
}

cara achei varios codigos, este é o que me parece mais perto do q realmente preciso. Porém tem algo errado e nao sei como corrigir.

 

Minha tabela de usuário é "Users" e o nome está na coluna "username"

 

o que está faltando ??

 

vlw

Share this post


Link to post
Share on other sites

Ok,

 

1) Pra você usar dessas funções do Eloquent Model (User::where por exemplo) você precisa importar o Model no seu controller.

2) Pode simplificar esta sintaxe aí no 5.5, não precisa fazer uso desse make.

 

Tente colocar dessa forma:

 

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User; // aqui você está importando o Model User

class ProfileController extends Controller
{
    public function show($username)
    {
        $user = User::where('username', $username)->first();

        return view('profile', compact('user'));
    }
}

Veja o resultado que tem e retorne =]

  • Obrigado! 1

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 terra
      Olá todos,
       
      Não consigo enviar e-mail com repley-to
       
      assim funciona:
       
      assim não funciona:
       
       
       
      Essa é função que envia email:
       
       
      Obrigado
      Toninho
    • By mkboy
      Olá,
       
      Ví que tem o Forum de PHP.
       
      Dúvidas de Laravel, posso perguntar nele, ou há um específico?
    • By joeythai
      Bom dia pessoal, minha dúvida é simples, vi que alguns arquivos xml tem a saída de data desta forma  "2020-01-22T09:18:50", como faço pra imprimir a data desta forma ? E o que significa esse T?]
      Eu estou usando o Carbon, to tentando encontrar esse padrão na documentação.
      2018-05-29T17:47:57 2018-05-29T17:47:57
    • By joeythai
      Boa tarde pessoal,
       
      Tenho uma API para enviad dados via XML, eu salvo esse xml em um arquivo físico, os dados no arquivo físico me retornam 2 registros com todas as TAGs certinho, porém, quando eu pego a url e mando no browser, esses registros duplicam, alguém sabe o porque disso ? Estou utilizando laravel e a biblioteca DomDocument do PHP. O código esse abaixo:
       
      <code>
      <?php   namespace App\Http\Controllers\API\V1\Integracao;   use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use App\Services\ToArray; use App\Exceptions\ApiException; use App\Http\Controllers\AppBaseController; use Illuminate\Support\Str; use App\Model\MySql\Site\IntegracaoModel as Integracao; use App\Model\MySql\Site\AuxFotosModel; use DOMDocument;   /** * * Classe criada para retornar informações dos imóveis do site da Sodré * e integrar com o Zap e Viva Real * */   class IntegracaoController extends AppBaseController { private $infos; private $integracao; private $urlImagem = "https://fotos.sodresantoro.com.br/fotos.imoveis/";   public function __construct(Integracao $integracao) { $this->integracao = $integracao; }   public function index() {   $dadosImoveis = $this->integracao->imoveis();   #versao do encoding xml $dom = new DOMDocument("1.0", "UTF-8");   #retirar os espacos em branco $dom->preserveWhiteSpace = false;   #gerar o codigo $dom->formatOutput = true;   #criando o nó principal (root) $root = $dom->createElement("ListingDataFeed"); $domAttrXMLNS = $dom->createAttribute("xmlns"); $domAttrXMLNS->value = 'http://www.vivareal.com/schemas/1.0/VRSync'; $domAttrXMLNSXSI = $dom->createAttribute("xmlns:xsi"); $domAttrXMLNSXSI->value = "http://www.w3.org/2001/XMLSchema-instance"; $domSchemaLocation = $dom->createAttribute("xsi:schemaLocation"); $domSchemaLocation->value = "http://www.vivareal.com/schemas/1.0/VRSync";   #nó filho $listings = $dom->createElement("Listings");   foreach ($dadosImoveis as $imoveis) {   $listing = $dom->createElement("Listing"); $details = $dom->createElement("Details"); $media = $dom->createElement("Media");   foreach ($imoveis->imagens as $key => $imagem) {   $this->infos['imagem'] = $this->urlImagem . $imagem->nome; $item = $dom->createElement("Item", $this->infos['imagem']);   #adiciona atributos nos elementos $domAttrImage = $dom->createAttribute("medium"); $domAttrImage->value = "image";   $domAttrCap = $dom->createAttribute("caption"); $domAttrCap->value = "img" . $key++;   $domAttrPrimary = $dom->createAttribute("primary"); $domAttrPrimary->value = "true"; $item->appendChild($domAttrCap); $item->appendChild($domAttrImage); $media->appendChild($item); } $this->infos['lance_inicial'] = $imoveis->vl_lanceinicial; $this->infos['title'] = $imoveis->title; $this->infos['descricao'] = $imoveis->descricao; $this->infos['lote_id'] = $imoveis->lote_id; $this->infos['endereco'] = $imoveis->Endereco; $this->infos['imagem'] = '';   //Faço o explode para poder fazer o envio(API não aceita casas decimais) //Para consultar: https://developers.grupozap.com/feeds/vrsync/elements/details/#list-price $preco = explode('.', $this->infos['lance_inicial']);   $listPrice = $dom->createElement("ListPrice", $preco[0]); $description = $dom->createElement("Description", htmlspecialchars(str_limit($this->infos['descricao'], 2000)));   $title = $dom->createElement("Title", $this->infos['title']); $listingID = $dom->createElement("ListingID", $this->infos['lote_id']); $transactionType = $dom->createElement("TransactionType", "For Sale"); $usageType = $dom->createElement("UsageType", "Residential"); $propertyType = $dom->createElement("PropertyType", "Residential / Apartment");   #adiciona os nós $details->appendChild($usageType); $details->appendChild($propertyType); $details->appendChild($description); $details->appendChild($listPrice);   $listing->appendChild($title); $listing->appendChild($listingID); $listing->appendChild($transactionType); $listing->appendChild($details); $listing->appendChild($media);   $listings->appendChild($listing); }   $root->appendChild($listings); $root->appendChild($domAttrXMLNS); $root->appendChild($domAttrXMLNSXSI); $root->appendChild($domSchemaLocation);   $dom->appendChild($root);   # Para salvar o arquivo, descomente a linha $dom->save("listagem-imoveis.xml");   #cabeçalho da página #header("Content-Type: text/xml"); # imprime o xml na tela print $dom->saveXML(); return response($dom->saveXML()); }   public function download() { return response()->file(public_path('listagem-imoveis.xml', 'Imóveis')); } } </code>
    • By samuelsennev
      Fala pessoal, beleza? 
      Então, estou tendo esse problema com o laravel 7. O que acontece é: tenho um formulário que manda alguns inputs para o método store(Request $request)--estrutura resource do laravel--, que por sua vez salva no banco de dados. Porém, a aplicação está caindo em uma página em branco antes de chegar no próprio método store. 
      O engraçado é que semana passada funcionava (inclusive salvava os registros no bd)... não fiz alterações que comprometem a rota. Simplesmente parou de funcionar. A aplicação me retorna uma página em branco.
       
      Vale lembrar:
      - A aplicação nem chega no controller;
      - Na primeira linha do método store(Request $request) tem um "dd($request);" para ver o que está chegando... ele nunca retorna a requisição na tela. Logo, presumo que o erro é na rota mesmo.
       
      A rota dentro de web.php: Route::get('/paginaPrincipal-5w2h', 'PT\PT_FiveTwoController@index')->name('index-5w'); Route::post('/salvando-5w2h', 'PT\PT_FiveTwoController@armazenar')->name('salvar-5w'); ------------------------------------------------------------------------------------------------------------------ O formulário da view: <form action="{{route('salvar-5w')}}" method="POST"> @csrf <div class="row"> <div class="col-lg-12S"> <div class="iq-card" > <div class="iq-card-header d-flex justify-content-between" style="border:none;"> <div class="row"> <div class="col-lg-6" style="padding-top: 2%; font-size: 18px;"> <label style="display: inline;">Nome: </label> </div> <div class="col-lg-6"> <input type="text" name="nome" class="form-control round" style="width: 200%;" placeholder="Seu nome..." > </div> </div> </div> </div> </div> </div> <button style="margin-left:90%; margin-bottom: 2%; padding:8px 16px ;" class="btn btn-primary">Salvar</button> </form> -----(A aplicação chega em index() tranquilamente, porém, em armazenar() não)----- O controller: namespace App\Http\Controllers\PT; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; class PT_FiveTwoController extends Controller { public function index() { $user_id = Auth::id(); $data = DB::table('5w2h')->select()->where('user_id', $user_id)->get(); // dd($data); return view('tools.5w2h', ['data' => $data]); } public function armazenar(Request $request) { dd($request); } }
       
       
×

Important Information

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