Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.08.2017 13:05:13

Добавление/редактирование данных

Добрый день!

Исходные данные:
1. Laravel Framework 5.4.32
2. PHP 5.6.30
3. Debian 8.9
4. Mysql 5.5.57
5. Apache 2.4.10

Задача - реализовать CRUD. Другими сломами, надо отобразить данные на странице в виде таблицы, и дать возможность добавления/редактирования/удаления. Для отображения используется https://datatables.net/
С отображением и удалением вопросов нет. Проблема в добавлении и редактировании, точнее не проблема, а вопрос - как это сделать оптимально "по уму".
Релизовал следующим образом:

web.php (маршруты):

//форма добавления
Route::get('/addnews', 'NewsController@add')->name('newsAdd');
//принимаем параметры и делаем инсерт
Route::post('/news/add', 'NewsController@store')->name('newsStore');

NewsController.php :

//просто открываем форму addnews
    public function add() 
    {
        return view('addnews');
    }

//добавляем данные в таблицу. Если есть ID, значит это UPDATE, если нет - INSERT.
    public function store(Request $request) 
    {
        $this->validate($request,
            ['caption' => 'required|max:255',
            'text' => 'required|max:1000']);
        $data = $request->all();

        if ($data['id'] == '') {
            DB::insert('insert into news (caption, text) values (?, ?)', [$data['caption'], $data['text']]);
        } else {
            DB::update('update news set caption=?, text=? where id = ?', [$data['caption'], $data['text'], $data['id']]);
        }

        $news = DB::select('select * from news');
        return view('news', ['news' => $news]);
    }

addnews.blade.php:

@extends('layouts.app')

@section('content')
    <div class="container-fluid">
      <div class="row row-offcanvas row-offcanvas-right">
        <div class="col-xs-12 col-sm-9 col-sm-push-3">
          <button type="button" class="pull-left btn btn-default visible-xs" data-toggle="offcanvas" aria-expanded="false" aria-controls="navbar">
            <i class="fa fa-navicon"></i>
          </button>

        @php
        $id='';
        $caption='';
        $text='';
        $window_header="";

        try {
          if ($news[0]->id != '') 
          {
            $id=$news[0]->id;
            $caption=$news[0]->caption;
            $text=$news[0]->text;
            $window_header="Создать";
          } else {
            $window_header="Отредактировать";
          }
        } catch (Exception $e) {

        }
        @endphp

        <div class="row">
        <main class="col-sm-12 col-md-12" style="padding-top: 2rem">
            <h1 style="font-weight: 300">
                <i class="fa fa-file-text-o" aria-hidden="true"></i>
                {{$window_header}}
            </h1>

            <form method="POST" action="{{route('newsStore')}}">

            @if (count($errors) > 0)
              <div class="alert alert-danger">
                <ul>
                  @foreach($errors->all() as $error)
                    <li>{{$error}}</li>
                  @endforeach
                </ul>
              </div>
            @endif

                <div class="form-group">
                    <label for="caption">Заголовок</label>
                    <input name="caption" type="text" class="form-control form-control-lg" value="{{$caption}}">
                </div>

                <div class="form-group">
                    <label for="exampleTextarea">Текст</label>
                    <textarea name="text" class="form-control" id="exampleTextarea" rows="5">{{$text}}</textarea>
                </div>

                <input type="hidden" name="id" value="{{$id}}">

                <div style="margin-top: 2rem;">
                    <button type="submit" class="btn btn-primary">
                        Добавить
                    </button>
                </div>

              {{ csrf_field() }}
            </form>
        </main>
    </div>
        </div>
      </div>
    </div>
@endsection

Вопрос в этом куске кода:

@php
        $id='';
        $caption='';
        $text='';
        $window_header="";

        try {
          if ($news[0]->id != '') 
          {
            $id=$news[0]->id;
            $caption=$news[0]->caption;
            $text=$news[0]->text;
            $window_header="Создать";
          } else {
            $window_header="Отредактировать";
          }
        } catch (Exception $e) {

        }
        @endphp

На сколько это гавнокод? Как лучше сделать, чтобы использовать одну и ту же форму для добавления/редактирования данных?
ORM не использую специально, надо голый SQL.

Заранее благодарю!

Не в сети

#2 17.08.2017 06:40:52

Re: Добавление/редактирование данных

я собственно не понял. если используется datatables, есть же пакет laravel-datatables в котором уже всё сделано, разве нет?

Не в сети

Подвал раздела