Por aquí quiero mostrarte un posible uso del instanceof en las relaciones polimórficas en Laravel
Recuerda que con el instanceof lo que estamos indicando es saber si el objeto que le estamos pasando es una instancia de una clase en particular en este caso libros puede ser post image depende de la temática con la cual estás trabajando.
Entonces por aquí primero te explico la relación aquí tengo la de libro que viene siendo la principal tal cual puedes ver:
class Book extends Model
{
***
public function files()
{
return $this->morphMany(File::class, 'fileable');
}
}
Y un libro puede tener de c a n archivos tal cual puedes ver por lo tanto es una de tipo uno a muchos entre libros y archivos y archivos pueden ser libros pueden ser imágenes pueden ser cualquier cosa:
class File extends Model
{
***
protected $fillable = ['file', 'type', 'fileable_type', 'fileable_id'];
public function fileable(): MorphTo
{
return $this->morphTo();
}
}
Aquí puedes ver un poquito lo que es la definición de un archivo en base a las relaciones polimórficas en Laravel:
public function fileable(): MorphTo
{
return $this->morphTo();
}
Esto es importante ya que si no recibimos directamente un archivo un archivo que es un genérico por así decirlo es decir en un momento dado es un libro pero dependiendo del registro puede ser no sé un video puede ser una imagen puede ser cualquier cosa a lo que me refiero que con tan solo el hecho de recibir aquí un archivo no puedo dar por hecho que es un libro creo que eso queda bastante claro y no quiero recibir aquí el libro por lo comentado antes porque se supone que está aquí incluido:
if ($file->fileable instanceof Book) {
// TODO
}
Que es lo que estamos descargando según la temática de este controlador que dice Book controller ya podemos dar por hecho que esto tiene que ser un libro que es lo que quiero trabajar acá pero obviamente nosotros tenemos que implementar la aplicación para que sea libre de errores por lo tanto archivos en un futuro otra vez puede ser videos puede ser imágenes puede ser cualquier cosa y por lo tanto quiero evitar cualquier problema en la cual un usuario atacante o por error mío o lo que sea puede recibir aquí otro Tipo de archivo que no sea un libro y recuerdo otra vez que es una relación polimórfica de tipo aquí en Book tenemos los archivos Entonces a lo que quiero llegar es que cuando vaya a procesar este archivo quiero estar completamente seguro que es un libro para que luego el proceso posterior no me de ningún problema que en este caso el proceso posterior como mostramos en el código anterior.
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter
Acepto recibir anuncios de interes sobre este Blog.
!Cursos desde!
10$
En Udemy
Quedan 3d 10:06!
!Cursos desde!
4$
En Academia
Ver los cursos!Libros desde!
1$
Ver los libros