Estoy usando Bootforms para editar publicaciones en un blog

<?php $formOptions = [
        'url' => 'user',
        'sm' => [2, 5],
        'lg' => [2, 5],
        'method'=> 'put'
    ]; ?>

    {!! BootForm::openHorizontal($formOptions)->action(route('news.update', $post)) !!}
    <input type="hidden" name="_method" value="PUT">
    {!! BootForm::text('Titre', $post->title) !!}
    {!! BootForm::text('Slug', $post->slug) !!}
    {!! BootForm::textarea('Contenu', $post->content) !!}
    {!! BootForm::submit('Editer') !!}
    {!! BootForm::close() !!}

Aquí está mi función PostController una vez que actualizo mi publicación:

 public function update($id, Request $request)
{
    $post = Post::findorFail($id);

    $title = $request->input('title');

    $post->title = $title;
    $post->content = $request->input('Contenu');

    $request->has('save');

    $post->save();
    return redirect(route('news.index'));
}

Pero una vez que edito mi publicación, encuentro este error como si estuviera enviando cadenas vacías: SQLSTATE [23000]: Violación de restricción de integridad: 1048 La columna 'título' no puede ser nula (SQL: update posts set title =, content =, updated_at = 2016-12-14 20:48:25 donde id = 3)

Si ves dónde está el problema, me vendría bien un poco de ayuda ...

0
Inas 15 dic. 2016 a las 00:05

2 respuestas

La mejor respuesta

Parece que utiliza parámetros no válidos en formularios. Si desea usar valores predeterminados, debe hacerlo como en el ejemplo de github:

https://github.com/adamwathan/bootforms

BootForm::text('Titre', 'title')->defaultValue($post->title);

Ahora usa $ post-> title como nombre de campo, por lo que $ _POST ['título'] está vacío.

1
lukasamd 14 dic. 2016 a las 21:13

Puede haber dos cosas que se pueden hacer.

1) Debe permitir que la columna title permita valores nulos. ALTER TABLE tableName MODIFY tabla VARCHAR (200);

2) Primero puede verificar si el título está configurado o no y mostrar el mensaje de error apropiado si no está configurado.

public function update($id, Request $request)
{
    $post = Post::findorFail($id);

    $title = $request->input('title');
    /*
     First check if tile is not empty
    */
     if (empty($title)){
        //show error message // echo 'Please fill in title or whatever';
     }else{

       $post->title = $title;
       $post->content = $request->input('Contenu');

       $request->has('save');

       $post->save();
       return redirect(route('news.index'));
     }
}

Parece intuitivo que el título no debe estar vacío, así que, en mi consejo, deberías probar el segundo método primero.

0
tango bango 14 dic. 2016 a las 21:21