Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

158
Visualizações
La ruta de Laravel resuelve el tipo de datos personalizado

Tengo las siguientes rutas en routes/api.php :

 Route::get('items/{item}', function(Guid $item) {...}); Route::get('users/{user}', function(Guid $user) {...});

Dado que Guid es un tipo personalizado, ¿cómo puedo resolverlo mediante la inyección de dependencia ? Como se muestra, el parámetro de ruta {item} difiere del parámetro de devolución de llamada type-hint: Guid , por lo que no se puede resolver automáticamente.


Eso es lo que probé en app/Providers/AppServiceProvider.php :

 class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { $this->app->bind(Guid::class, function(Application $app, array $params) { return Guid::fromString($params[0]); }); } }

Esperaría que $params fuera algo como esto: [ 'item' => 'guid' ] -- pero es: [] .

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puede hacer uso del enrutamiento de Laravel de enlace explícito :

en RouteServiceProvider::boot() :

 public function boot() { Route::model('item', Guid $item); Route::model('user', Guid $user); }

Si Guid no es un modelo, use un Closure para mapear en la cadena:

 Route::bind('user', function ($value) { return Guid::fromString($value); });

ACTUALIZADO

Y encontré otra forma, mucho mejor: implementar UrlRoutable contract Lavaravel API :

 <?php namespace App\Models; use Illuminate\Contracts\Routing\UrlRoutable; class Guid implements UrlRoutable { private string $guid; public function setGuid(string $guid) { $this->guid = $guid; return $this; } public function getGuid(): string { return $this->guid; } public static function fromString(string $guid): self { //you cannot set props from constructor in this case //because binder make new object of this class //or you can resolve constructor depts with "give" construction in ServiceProvider return (new self)->setGuid($guid); } public function getRouteKey() { return $this->guid; } public function getRouteKeyName() { return 'guid'; } public function resolveRouteBinding($value, $field = null) { //for using another "fields" check documentation //and maybe another resolving logic return self::fromString($value); } public function resolveChildRouteBinding($childType, $value, $field) { //or maybe you have relations return null; } }

Y, con esto, puede usar rutas como desee, ya que Guid ahora implementa UrlRoutable y puede convertir {item} (o lo que sea) marcadores de subcadena de ruta de URL en Guid s por inyección de dependencia (mediante la sugerencia de tipo que solicitó eso):

 Route::get('items/{item}', function(Guid $item) { return $item->getGuid(); });

Por cierto: NUNCA NUNCA use cierres en rutas ya que no puede almacenar en caché las rutas de cierre, y las rutas son buenas para optimizarse, y el almacenamiento en caché ayuda con eso en el enrutamiento de Laravel.

over 4 years ago · Santiago Trujillo Relatório

0

ayudante simple para utilizar la devolución de llamada de enlace de ruta.

 if (!function_exists('resolve_bind')) { function resolve_bind(string $key, mixed $value) { return call_user_func(Route::getBindingCallback($key), $value); } }

uso

 resolve_bind('key', 'value');
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda