Próximo 10 de Junio, curso de TDD en Laravel nuestro primer curso premium

Italo Morales

Venezuela Italo Morales


Miembro desde hace 8 meses

Biografía

Profesor de #Laravel y #PHP en Rimorsoft Online


italomoralesf aportó en Error en la visualización de imágenes a causa de la ruta guardada en la base de datos hace 7 horas

Cuando haces pruebas tu accedes a tu proyecto colocando http://localhost/ y cuando entras desde otro equipo lo haces colocando tal vez http://192.168.0.4/

Sucede que la imagen siempre se va a guardar con la dirección que estés usando para entrar. Puedes desde tu mismo equipo ingresar con http://192.168.0.4/

Es correcto usar rutas absolutas, pero para evitar ese problema nosotros enseñamos en el curso del blog como usar https://lorempixel.com/ y usar imagenes semillas.

italomoralesf aportó en Parámetros de tipo objeto en PHP hace 1 día

A veces un parametro es mas que un string o integer, imagina el objeto usuario podría necesitar el objeto post. Respecto a tu pregunta, ambas clases deben existir.

italomoralesf aportó en Tablas de roles, usuarios y permisos hace 1 día

Tal vez debas editar tu post para entenderlo.

Si no me lees a tiempo, hoy tarde lo edito para poderlo entender.

italomoralesf aportó en API DE CONEKTA CON LARAVEL hace 3 días

Ellos tienen una buena documentación, no se si ya la has revisado es aquí

Trae el método correcto para Ruby, PHP, Node, etc

Revisa esa documentación, regístrate y cualquier cosa solicita soporte directo, porque tus acciones les generarán ingresos a ellos... Por eso ayudan y lo hacen rápido.

italomoralesf aportó en maatwebsite/excel 3.0 hace 3 días

Tal vez has leído este artículo amigo Exportar hoja de calculo (Excel) en Laravel 5.5

Esto funcionaría muy bien en tu versión 5.6

italomoralesf aportó en Class App\Http\Requests\PostStoreRequest does not exist hace 3 días

Si el archivo existe y aún así surge este error... Entonces ejecuta el comando composer dump-autoload (refresca nuestro listado de clases, lo actualiza)

Aquí una explicación mas completa de composer

italomoralesf aportó en Problema con el stringToSlug hace 6 días

No sé si tu problema sea compatibilidad. Debes tener en cuenta que hay que implicar a jQuery.

En todo caso puedes usar esta otra librería https://github.com/pid/speakingurl que es mas moderna:

Ejemplo

Importas en el navegador (desde una carpeta local)

<script src="js/speakingurl/speakingurl.min.js"></script>

Importas en el navegador (o así desde un CDN)

<script src="https://cdnjs.cloudflare.com/ajax/libs/speakingurl/14.0.1/speakingurl.min.js"></script>

Así usas la librería

var slug;

slug = getSlug("Schöner Titel läßt grüßen!? Bel été !");
console.log(slug); // Output: schoener-titel-laesst-gruessen-bel-ete
italomoralesf aportó en Validar 2 campos Unique con el sistema FormRequest de laravel hace 1 semana

Yo veo que está bien.

Asegútare que se esté llamando correctamente desde el controlador: La sintaxis es 'email' => 'unique:users,email,'.$user->id

Te puedo sugerir que hagas un dd() antes para ver que hay dentro de $this->user, es decir, haz esto:

public function rules()
{
    dd($this->user);
    return [
            'name'      => 'required',
            'username'  => 'required|unique:users,username,' . $this->user,
            'email'     => 'required|unique:users,email,'. $this->user
    ];
}
italomoralesf aportó en sumas de fechas hace 1 semana

Puedes tal vez mejorar tu pregunta?

Dice suma de fechas pero al parecer necesitas restarlas y sacar el resultado en días... Luego comentas que necesitas que sea en vuejs

Debes ser un poco mas claro para conseguir muchas respuestas precisas

italomoralesf aportó en Relaciones en Laravel hasOne, belongsTo, hasMany, belongsToMany ¿Dónde usar cada método para especificar las relaciones? hace 1 semana

Se debe seguir la teoría de *Relaciones SQL: Uno a Uno, Uno a Muchos, Muchos a Muchos..

  • Un usuario tiene un perfil (La relación es uno a uno)
  • Un usuario tiene muchos post (La relación es uno a muchos)
  • Un usuario conoce y maneja varios lenguajes de programación (La relación es muchos a muchos)

Entonces, siguiendo mi ejemplo: En Laravel sería...

Archivo User

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }

    public function posts()
    {
        return $this->hasMany(Post::class);
    }

    public function Tags()
    {
        return $this->belongsToMany(Post::class);
    }
}

Archivo Tag

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    public function Users()
    {
        return $this->belongsToMany(User::class);
    }
}

Archivo Post

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function User()
    {
        return $this->belongsTo(User::class);
    }
}
italomoralesf aportó en 1364 Field 'name' doesn't have a default value (SQL: insert into `tags` (`updated_at`, `created_at`) hace 1 semana

El error dice que nada está llegando a name y no tiene un valor por defecto.

Revisa la entidad Tag, debe estar así

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model
{
    protected $fillable = [
        'name', 'slug'
    ];
    public function posts()
    {
        return $this->belongsToMany(Post::class);
    }
}
italomoralesf aportó en Ordenar alfabéticamente consulta por campo Accessor de Laravel hace 1 semana

La clave está en que es un accessor, es decir, la unión de una o varias columnas.. por eso orderBy no funcionará, porque se trata de una "columna compuesta".

La otra clave es que usas pluck y este método genera un array, así que tu solución sería ordenar un array usando el método sort, es decir:

  • Haces tu consulta
  • Recibes un array
  • Ordenas el array

Tomando en cuenta que tienes esto

$movements = Move::all()->pluck('type_name', 'id');

Agrega sort al final

$movements = Move::all()->pluck('type_name', 'id')->sort();
italomoralesf aportó en Como puedo generar varios pdf con secuenciales dinamicos hace 1 semana

Lo edité porque lo has marcado como mejor respuesta :)

italomoralesf aportó en Borrado Lógico, método softDeletes en Laravel hace 1 semana

Revisa nuevamente los pasos, algo debió saltarse. Esto es algo que yo uso siempre :)

italomoralesf aportó en Como puedo generar varios pdf con secuenciales dinamicos hace 1 semana

Puedes rehacer tu comentario para leer mejor el código

italomoralesf aportó en Como puedo generar varios pdf con secuenciales dinamicos hace 1 semana

Has revisado este post? https://rimorsoft.com/generar-reportes-pdf-en-laravel-5-5

Yo creo que debes hacer un ciclo de 100 vueltas, y cada vez que des una vuelta debes: 1) Actualizar el número y 2) Generar el PDF.

Es decir, en cada vuelta editas el dato y mandas a generar el archivo. En el post que te comparto está la forma de dar formato y generar el archivo.

italomoralesf aportó en Modificar datos de un objeto en el evento show del controller hace 1 semana

Usa el sistema de traducciones de Laravel

Crea un archivo en resources/lang/es/resource.php ahí dentro retorna un array: (en mi ejemplo se llama resource.php, tu puedes colocar el nombre que desees)

<?php

    return [
        'ADMINISTRATOR'   => 'Administrador',
	'READONLY' => 'Solo Lectura'
    ];

Y así, todas tus traducciones.

Luego en la vista imprimes así: trans("resource.$us->userType");

italomoralesf aportó en CRUD en Laravel hace 1 semana

Muchas gracias, cambia tu nombre de usuario y crea un avatar en gravatar para destacar tu comentario :)

italomoralesf aportó en crear registros en tablas relacionadas con un solo formulario. hace 1 semana

En el mismo formulario envía los campos (input necesarios) y a la hora de guardar puedes lograr separar.

$conductor = Conductor::create([
    'campo'    => $request->get('campo'),
    'campo'    => $request->get('campo'),
]);

$vehiculo = Vehiculo::create([
    'campo'    => $request->get('campo'),
    'campo'    => $request->get('campo'),
]);

$conductor->vehiculos()->attach($vehiculo->id);

Algo así podría servirte, guardas por separado y al final puedes relacionar si lo llegaras a necesitar.

italomoralesf aportó en Opción vacía en select de LaravelCollective/Html hace 2 semanas

Conozco dos maneras Andrés:

Esta es la primera

{{ Form::select('move_id', $movements, null, ['placeholder' => 'Seleccione un movimiento...']) }}

En este caso, así como agregas una clase puedes agregar un placeholder

La segunda opción sería Convertir la consulta en array y luego a ese array resultante sumarle un array vacío

//consulta
$movements = Move::pluck('type_name', 'id')->toArray();

//imprimes tu select
{{ Form::select('move_id', [' ' => 'Seleccione un movimiento...'] + $movements, null]) }}

Puedes usar la que gustes :)

italomoralesf aportó en Componente VUEjs en Laravel hace 2 semanas

Muchas gracias mi amigo...

italomoralesf aportó en Laravel Passport vs jwt, cuál usar hace 2 semanas

Yo diría que es mejor solo cuando hablamos de Laravel, porque es el paquete oficial de Laravel. Pero cualquiera puede ser consumida por varios clientes.

italomoralesf aportó en Triggers en laravel hace 2 semanas

Trigger traduce a disparador, lanzador, disparador o gatillo... Es una forma de anunciar o avisar un cambio en la base de datos... De hecho esto es algo que se asocia a las tablas. En Laravel tenemos los eventos, eso podría ayudarte...

Parece ser un buen tema para tocar en un post futuro. Al hacerlo te aviso mi amigo.

italomoralesf aportó en visualización de las imágenes guardadas después de subir proyecto larval a producción hace 2 semanas

Lo que sucede es que un proyecto en entorno local debe trabajarse con data semilla y al subirse al servidor su propia data real.

Si haces todo de forma local te va a fallar porque usamos rutas absolutas..

Sin embargo,

La solución a tu problema, es trabajar con rutas relativas, de esa manera no importaría en que dominio se encuentra su proyecto.

Ejemplos

  • URL absoluta: https://www.rimorsoft.com/php/leccion-1
  • URL relativa: /php/leccion-1

Con rutas relativas solucionas ese problema ya que no importa en que dominio se encuentre el proyecto.

italomoralesf aportó en error de llamado de campos de dos tablas relacionado hace 3 semanas

No debe existir un modelo para la tabla pivote o intermedia.

En el modelo veo que está bien la relación

return $this->belongsToMany(Modelo_servicio::class, 'cliente_servicio', 'clientes_id', 'servicios_id');

El recorrido de los datos, también lo veo bien:

@foreach($client->Servicio as $servicio)
    <li>{{ $servicio->descripcion_servicio}}</li>
@endforeach

Solo veo eso del modelo para la tabla intermedia, no debería existir.

Otra cosa es... Confunde un poco que en el código uses español.

italomoralesf aportó en Cual paquete de permisos puedo usar ? hace 3 semanas

De momento yo recomendaría Shinobi: ¿Por qué?

  • Esta semana terminamos de grabar el curso, así que ahí tienes el soporte y ejercicio necesario.
  • Acaban de actualizar para que funcione bien en Laravel 5.6

spatie/laravel-permission es un gran componente, yo le dedicaré (en el canal) una serie en el mes de Abril 2018. Tiene mejor alcance que Shinobi, pero como mencionas que es una "plataforma un poco sencilla", te recomiendo Shinobi

italomoralesf aportó en concatenar mas búsquedas... hace 3 semanas

Yo creo amigo que debes hacer la pregunta un poco mas general, he visto que preguntas sobre un tema y hablas de jugadores, juegos, partidos y todo lo relacionado con de tu sistema; pero a veces no entendemos de esa manera.. Lo digo porque creo que tu proyecto es en si complicado, debes pensar como si podemos entenderte y ayudar.

Por ejemplo: En ese tema, puedes pretungar Busqueda y filtrado de varios campos en Laravel Eso es mucho mas entendible y estoy seguro que te lloverán respuestas.

Mientras, estaré leyendo tu pregunta a ver si doy con la solución.

Saludos.

italomoralesf aportó en Laravel Passport vs jwt, cuál usar hace 3 semanas

Es una gran pregunta amigo: Yo diría que Laravel Passport es un paquete como cualquier otro para Laravel... Sucede que este paquete implementa OAuth2 y JWT. Podría decirse que Laravel Passport es la forma mas fácil de usar esta tecnología en Laravel.

Algunas definiciones

  • Laravel Passport es un paquete oficial de Laravel.
  • Auth0 es un servicio externo o de tercero de autenticación.
  • OAuth2 es un pequeño framework de autorización, por medio de él puedes dar acceso limitado a cuentas de usuario de GitHub y otros. De hecho yo diría que es la versión avanzada de Auth0, su versión 2.0.
  • JWT es un formato de token. Hay muchos formatos de token y este es en este momento (según observo) el mas popular.

Respondiendo a tu pregunta ¿Cuál usar?

Si desarrollas en Laravel deberías usa Laravel Passport porque fue creado especialmente para él.

Sin embargo, usa lo que desees, Laravel Passport o Auth, yo usaría el paquete oficial de Laravel, pero la elección real depende de ti. Solo puedo decirte que Laravel hace que la autenticación de API sea muy sencilla cuando usas el paquete Laravel Passport.

italomoralesf aportó en ayuda con consulta hace 3 semanas

Postea tu solución y marca la mejor respuesta, tal vez tu propio descubrimiento :)

italomoralesf aportó en error al querer mostrar el el nombre del campo de una tabla relacionada con otra de muchos a muchos hace 3 semanas

Revisa si al colocar así la relación puedes resolver: return $this->belongsToMany(Modelo_servicio::class, 'clientes_servicios', 'clientes_id', 'servicios_id');

La tabla clientes_servicios debe existir con los campos clientes_id, servicios_id porque el error hace referencia a que no consigue la tabla clientes_servicios

italomoralesf aportó en Composer, administrador de paquetes de PHP hace 3 semanas

Esta es una gran serie, es escrita pero con contenido muy importante, espero la disfrutes.

italomoralesf aportó en Enviar Email hace 3 semanas

Genial Juan, eso lo mejor... :)

italomoralesf aportó en Aprendiendo php aprenderas laravel hace 3 semanas

Que gran tema el que has creado, mi recomendación es entrar de lleno en Laravel y en paralelo vayas entrando en PHP, sucede que tarde o temprano el framework te va a exigir esos conocimientos.

Te recomiendo Laravel directamente porque el en si mismo motiva, sucede que con pocos conocimientos podrás hacer grandes cosas.

italomoralesf aportó en No conecta a base de datos. hace 3 semanas

No deberías (creo), guardar en el escritorio... Nunca lo he intentado así, yo te sugiero no hacerlo. Todo debe estar dentro del proyecto.

DB_CONNECTION=sqlite está bien,

A nivel de rutas, prueba con algo más sencillo para descartar... DB_DATABASE=database/database.sqlite y considera lo que sugiere Carlos Ramos

italomoralesf aportó en ayuda con consulta hace 4 semanas

El método sum() te ayudaría con la suma de los minutos... Pero quiero comentarte que te había sugerido crear un nuevo tema, porqué pensé que querías aprender a subir imágenes. Pero trata de lo mismo.

Pero, ok... Atento a esto para poder ayudarte mejor.

De forma sencilla pero funcional, podrías listar a los jugadores, y luego recorrerlos para usar sobre cada uno el método sum() en la columna minutos, para tener el total.

Básicamente estoy diciendo, que me traiga a todos los jugadores que han jugado alguna vez y que si es así me sume los minutos jugados.

italomoralesf aportó en ayuda con consulta en laravel hace 4 semanas

Cierra este tema y crea otro tema para ayudarte con lo que quieres sobre las imágenes.

italomoralesf aportó en Palabras Reservadas para Nombre de Rutas (routes/web.php) hace 4 semanas

Tu pregunta es muy interesante, de hecho al leerla me descargué r[apidamente una versión de Laravel para hacer esa prueba, y lo extraño es que a mi si me sirve. Hice lo siguiente:

Ruta Route::resource('vendors', 'VendorController');

Controlador

<?php

namespace App\Http\Controllers;

class VendorController extends Controller
{
    public function index()
    {
    	return 'Ruta con correcto acceso';
    }
}

Y ha funcionado,

Un error 403 hace referencia a que no tienes permisos, es acceso no autorizado, creo entonces que en tu sistema hay algo que lo bloquea o tal vez necesitas iniciar sesión para entrar.

Cuando PHP salta por palabras reservadas, él lo dice claramente en el error.

Te comparto la lista de palabras reservadas de PHP que está en su documentación oficial.

Click para ver el listado de palabras reservadas en PHP

italomoralesf aportó en ayuda con consulta en laravel hace 4 semanas

Una estadística necesita dos datos... Tiempo y cantidad, o tipo y cantidad toda librería de JS te pide un array con estas dos columnas.

Si bien es cierto, Laravel proporciona muchas funciones interesantes, pero hay cosas que debemos calcular y fabricar nosotros mismos.

  • Está el método de Eloquent withCount, para que en la misma consulta nos dé un número de una relación. $posts = Post::withCount('comments')->get();
  • También tenemos el método sum(), que devuelve la suma de todo lo que desees sumar.

Puedes consultarlo de la siguiente manera:

Ejemplo

$users = User::withCount('played')->get();

foreach ($users as $user) {
    echo $user->played_count;
}

O en vez de recorrerlo así, puedes pasar la collección a la librería js que vayas a usar.

Si necesitas un array(), puedes retornarlo así $users = User::withCount('played')->get()->toArray();

Así podrías comenzar amigo, hasta llegar a tu solución específica... Porque es muy particular eso que necesitas.

italomoralesf aportó en Bulma Presets sin estilo hace 4 semanas

Ya puedes editar amigo, al hacerlo reporta cualquier error por favor

italomoralesf aportó en ¿Es necesario composer.json SIEMPRE? ¿No basta con composer.lock? hace 4 semanas

Muchas gracias Juan por tus buenos deseos, de hecho si... Es el próximo paso, los moderadores, botón de edición y así poco a poco hasta dejar bien este foro.

italomoralesf aportó en Carga de imagenes hace 4 semanas

Tu código debía estar formateado, no en imagen... Voy a trabajar en editar para que puedas corregir eso amigo, también veré como hacer una serie de markdown para que todos puedan escribir correctamente aquí y así reciban respuestas valiosas.

italomoralesf aportó en Pasar un array de laravel a JS hace 4 semanas

A ver, creo que debemos ir por pasos: Yo no he usado esta librería pero algo así debe ser.

Así inicias el calendario $('#calendar').calendar(); y dentro del método calendar es donde debes pasar las opciones $('#calendar').calendar({ /* opciones */ })

No veo que necesites hacer un bucle, porque el json ya lo traes desde el servidor usando ajax y solo lo usas desde el js.

Ejemplo estático:

$('#calendar').calendar({ 
    dataSource: [
        {
            id: 0,
            name: 'Opción 1',
            startDate: new Date(2018, 1, 24),
            endDate:   new Date(2018, 1, 27)
        },
        {
            id: 2,
            name: 'Opción 2',
            startDate: new Date(2018, 2, 24),
            endDate:   new Date(2018, 2, 27)
        }
    ]
});

Aquí hay dos registros estáticos, pero en vez de eso puedes probar pasando la variable, lo que te retorna el ajax.

italomoralesf aportó en ¿Es necesario composer.json SIEMPRE? ¿No basta con composer.lock? hace 4 semanas

Si lo dejas 5.5.0 no actualizaría, pero si lo escribes 5.5.* si, porque el comodín no define que versión exactamente.

Para ver en detalle la teoría de ese archivo puedes revisar este material composer.lock

italomoralesf aportó en ¿Es necesario composer.json SIEMPRE? ¿No basta con composer.lock? hace 4 semanas

Pero no estaría mal, por ejemplo "laravel/framework": "5.5.*" no instalaría la versión 6 (en caso de que salga).

Lo que creo que deberías hacer, es limitar un máximo de versiones... Y permitir que cada proyecto se descargue su archivo composer.json

italomoralesf aportó en ¿Es necesario composer.json SIEMPRE? ¿No basta con composer.lock? hace 4 semanas

En composer.json tenemos una breve lista con las versiones aproximadas de dependencia que Composer debe instalar, y el archivo composer.lock tiene el registro exacto de las versiones de dependencia que se han instalado.

Puedes borrar el archivo .lock pero al ejecutar composer install se creará de nuevo el archivo .lock

italomoralesf aportó en Consultar múltiples tablas relacionadas en Laravel (Eloquent) hace 4 semanas

Está díficil comprender que quieres lograr, pero si entendí bien esta consulta te puede ayudar... Para que no navegues entre tantas colecciones.

En el controlador haría lo siguiente:

        $code = $request->get('code');
        $movements = Movement::orderBy('id', 'DESC')
            ->whereHas('policy', function ($query) use ($code) {
                if($code){
                    $query->where('code', 'LIKE', "%$code%");
                }
                $query->whereHas('issue', function($query) {
                    $query->whereIn('status', ['review', 'checked', 'approved']);
                    $query->whereHas('users', function($query) {
                        $query->where('user_id', currentUser()->id);
                    });
                });
            })
            ->paginate();

        return view('movement.index', compact('movements'));

A través del whereHas ves como navego entre tablas, (toma en cuenta que deben existir las relaciones en las entidades)

Y en la vista imprimiría así:

            @forelse($movements as $movement)
                <tr>
                    <td>{{ $movement->policy->issue->name_client }}</td>
                    <td>{{ $movement->policy->code }}</td>
                    <td>{{ $movement->date_movement }}</td>
                    <td>{{ $movement->move->type_name }}</td>
                    <td>
                        @foreach($movement->branches as $branch)
                            {{ $branch->name }} <br>
                        @endforeach
                    </td>
                    <td>{!! $movement->details !!}</td>
                    <td>
                        <a href="{{ route('movements.show', $movement->id) }}">
                            <span class="fa fa-eye"></span>
                        </a>
                    </td>
                </tr>   
            @empty
            <tr>
                <td colspan="5">No hay movimientos pendientes</td>
            </tr>
            @endforelse

Espero esto te ayude mi amigo, si algo no comprendes o yo te entendí mal me haces saber.

Lo que hice fue copiar tu código y editar según comprendí.