Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день!
Исходные данные:
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.
Заранее благодарю!
Не в сети
я собственно не понял. если используется datatables, есть же пакет laravel-datatables в котором уже всё сделано, разве нет?
Не в сети
Страницы 1