Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[SOLUCIONADO] Duda para mostrar vista

Estas en el tema de Duda para mostrar vista en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, buenas tardes. Tengo una duda para mostrar una vista con parámetros. Les explico: Tengo una página principal que muestra una serie de programas (programa ...
  #1 (permalink)  
Antiguo 09/06/2020, 14:16
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 824
Antigüedad: 15 años, 6 meses
Puntos: 25
Duda para mostrar vista

Hola, buenas tardes.

Tengo una duda para mostrar una vista con parámetros. Les explico:

Tengo una página principal que muestra una serie de programas (programa 1, 2, 3, etc), entonces cuándo le das clic a alguno te manda a la página de ese programa pero con su id como parámetro, por ejemplo, es como si cada programa fuera la entrada de un blog y al darle clic nos manda a la entrada correspondiente.

Tengo mi ruta creada de la siguiente forma:

Código PHP:
Route::get('/show/{id}', function ($id) {
    return 
"{id}";
}); 
y tengo una vista creada que se llama show.blade.php, la cuál ya tiene todo el diseño (en código duro), de como se debería ver. El id lo debo de obtener de una base de datos ya creada.

La página principal se llama shows y tiene el enlace para ir a show/{id} de esta forma:

Código PHP:
<a href="show/{{ $show ->id_season }}" class="text-light mr-4">{{ Str::limit($show ->sh_show20) }}</a
Sin embargo, cuando le doy clic al enlace me manda a una página de esta forma http://127.0.0.1:8000/show/4 que solo muestra: {id}

Espero haberme explicado bien. ¿Saben que me está haciendo falta?

Saludos!
  #2 (permalink)  
Antiguo 09/06/2020, 18:58
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.751
Antigüedad: 12 años, 8 meses
Puntos: 1134
Respuesta: Duda para mostrar vista

Entiendo el código que expones y el resultado obtenido, todo esta OK incluyendo el hecho que tengas solo el ID en la ruta.

Lo que no entiendo es que resultado esperabas obtener.

De momento todo lo veo bien.
  #3 (permalink)  
Antiguo 09/06/2020, 19:49
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 824
Antigüedad: 15 años, 6 meses
Puntos: 25
Respuesta: Duda para mostrar vista

Hola Arturo, gracias por responder!

Me quedó la duda si me expresé bien, creo que algo me falto. Mira, está página que muestro está en código duro, pero es la página que debe mostrar el "show" por id:

http://serverbideas.com/becast/show

como verás, la página ya está armada, solo falta hacer que muestre la información de forma dinámica.

para ello hice la ruta como:

Código PHP:
Route::get('/show/{id}', function ($id) {
    return 
"{id}";
}); 
entonces se debería mostrar la url como http://serverbideas.com/becast/show/id -> siendo el id cualquier número.

Pero cuando le doy clic en el enlace

Código PHP:
<a href="show/{{ $show ->id_season }}" class="text-light mr-4">{{ Str::limit($show ->sh_show20) }}</a
el único contenido que muestra en toda la página es:

{id}

es decir, todo en blanco, pero con el texto {id}

no sé si creando el controlador y haciendo la consulta se solucione, pero, al menos me debería seguir mostrando la página como se ve actualmente, o me equivoco?

Estoy aprendiendo Laravel, pero voy en intensivo porque ya me lo exigen xD

Saludos!!

Ojo! el error ahorita solo lo veo en localhost, la que tengo en el servidor es una página 100% en código duro.
  #4 (permalink)  
Antiguo 09/06/2020, 22:20
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.751
Antigüedad: 12 años, 8 meses
Puntos: 1134
Respuesta: Duda para mostrar vista

aaa ya te entendi, y es totalmente normal ya que en la ruta es lo que estas indicando que imprima únicamente la variable.

Si quieres mostrar una pagina debes retornar un view
Código PHP:
Ver original
  1. Route::get('/show/{id}', function ($id) {
  2.     return view('greeting', ['show' => $id]);
  3. });

Aunque claro a ese view solo estas enviando esa variable y no podras obtener mas datos del show, si debes consultar la base de datos para obtener la informacion del show completo es mejor retornar un controlador


en lugar de usar una funcion deberias apuntar a un controlador
Por ejemplo
Ruta:
Código PHP:
Ver original
  1. Route::get('show/{id}', '[email protected]');

y en tu controlador
Código PHP:
Ver original
  1. public function detail($id)
  2.     {
  3.         return view('show.detail', ['show' => Show::findOrFail($id)]);
  4.     }


Te invito a leer la documentación sobre los controladores

https://laravel.com/docs/7.x/controllers
  #5 (permalink)  
Antiguo 10/06/2020, 12:12
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 824
Antigüedad: 15 años, 6 meses
Puntos: 25
Respuesta: Duda para mostrar vista

Te agradezco Arturo! ya me quedío más claro.

Lo hice de esta forma:

Código PHP:
class SeassonController extends Controller
{
    public function 
detail($id){
        
        
$seassons DB::table('episodes')->join('seasons','id_season','=','ep_season')->join('shows','ss_show','=','id_shows')->where('id_season','='$id)->orderBy('id_season','DESC')->take(1)->get();
        
        return 
view('show'compact('seassons'));
    
    }   

Con esto, ya puedo ir mostrando los elementos en la vista de "show".

Sin embargo, estoy usando en la vista de "show" lo siguiente: @forelse($seassons as $seasson)

para ir armando las llamadas a los campos de mi base de datos, por ejemplo: {{ $seasson ->sh_show }}

¿es la manera correcta? creo que no, porque el for es para traer varios registros y solo quiero traer de acuerdo al id solicitado.

¿Cómo sustituyo @forelse($seassons as $seasson)?

Saludos!
  #6 (permalink)  
Antiguo 10/06/2020, 16:26
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.751
Antigüedad: 12 años, 8 meses
Puntos: 1134
Respuesta: Duda para mostrar vista

Utiliza first() en lugar del get()

get() siempre traera todos los resultados, first() solo regresa el primero que coincida.

Tambien prueba usar el Modelo en lugar de usar DB::table('episodes') seria algo como

$episode = Episodes::where('id', $id)->first()

Te hace falta leer un poco mas la documentacion, para evitar ese Join que estas haciendo prueba tambien aplicarlo en el modelo

https://laravel.com/docs/7.x/eloquent-relationships
  #7 (permalink)  
Antiguo 22/06/2020, 10:16
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 824
Antigüedad: 15 años, 6 meses
Puntos: 25
Respuesta: Duda para mostrar vista

Gracias ArturoGallegos, ya estoy revisando Eloquent y tomando un curso de ello. Una disculpa por responder tan tarde, me quedé sin Internet varios días :(

Saludos!!



La zona horaria es GMT -6. Ahora son las 23:42.