мое приложение - менеджер книг, где я могу создавать книги и страницы.restFUL API зависимость от магазина
у меня BookController с «магазином» на POST, хранящее название и описание.
public function store()
{
$rules = array(
'title' => 'required|min:3',
'description' => 'required|min:30'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Response::json(
array(
'metadata' => array(
'error' => true,
'message' => 'The book creation has failed'
)
),
400
);
}
else {
$slug = Str::slug(Request::get('title'));
$existSlug = Book::where('slug',$slug)->get();
if(count($existSlug) > 0) {
return Response::json(
array(
'metadata' => array(
'error' => true,
'message' => 'This title is already taken'
)
),
400
);
}
else {
$book = new Book;
$book->title = Request::get('title');
$book->slug = $slug;
$book->description = Request::get('description');
$book->user_id = Auth::user()->id;
$book->status = false;
$book->save();
$stored = $book->toArray();
$metadata = array(
'metadata' => array(
'error' => false,
)
);
return Response::json(
array_merge($stored,$metadata),
201
);
}
}
}
У меня также есть PageController с «магазином» на POST, хранящее содержание страницы:
public function store()
{
$rules = array(
'content' => 'required|between:300,350',
'book_id' => 'required|exists:books,id'
);
$validator = Validator::make(Input::all(), $rules);
if($validator->fails()) {
return Response::json(
array(
'metadata' => array(
'error' => true,
'message' => 'The page must be between 300 and 350 characters'
)
),
400
);
}
else {
$book = Book::find(Input::get('book_id'));
$content = Input::get('content');
$parent = Page::where('book_id',$book->id)->where('status',1)->orderBy('id', 'desc')->first();
if($parent){
$parent_id = $parent->id;
$parent_number = $parent->number;
$status = 0; //Define the status of the created page
}
else{
//If it's the first page of the book
$parent_id = 0;
$parent_number = 0;
$status = 1; //if there's no parent page, the new page is the first - auto validated - page of the book.
if($book->user_id != Auth::user()->id) {
return Response::json(
array(
'metadata' => array(
'error' => true,
'message' => 'You have to be the author of a book to write the first page.'
)
),
403
);
}
}
$page = new Page;
$page->content = $content;
$page->book_id = $book->id;
$page->parent_id = $parent_id;
$page->number = $parent_number + 1;
$page->user_id = Auth::user()->id;
$page->status = $status;
$page->save();
$stored = $page->toArray();
$metadata = array(
'metadata' => array(
'error' => false
)
);
return Response::json(
array_merge($stored,$metadata),
201
);
}
}
Всякий раз, когда кто-то создает книгу, он должен написать по крайней мере, его первой странице. Это результат в форме с заголовком, описанием и контентом.
я отправить POST в [...]/книгах с моим вводом названием и описанием
Если Success => Я получаю книгу ID, и отправить его с содержанием ввода в [...]/страницы.
Вот мои проблемы:
- Кто-то может отправить почту на [...]/книги и хранить новую книгу, без страницы
- Я хочу, чтобы решить эту проблему в более «успокоительный путь», что означает отсутствие «хак решения», как отправку содержания в/книги и сделать проверку страницы в BookController
- Кроме того, даже если бы я выбрал хак путь, мой API еще не безопасно: я могу остановить второй запрос (на/pages), который нужно отправить.
Как справиться с этим созависимость?
Вы можете добавить все содержимое в одну форму для книги и страницы и сохранить контент одновременно с одного контроллера или просто создать страницу по умолчанию, когда кто-то создает книгу, а затем позволяет редактировать страницу. –