0 レビュー
1 回答
php-Laravelルーティング/コントローラー
CIからlaravelに移行することにしましたが、データベースに挿入してからレコードをロードする基本的なフォームの正しい実装を理解するのに問題があります。私のフォームは、入力データを処理して保存するコントローラーメソッドを呼び出しますが、これを処理する代わりにモデルを使用する必要があるように感じます。これが私のコードです:
Routes.php
Route::get('neworder', '[email protected]');
Route::post('submitorder', '[email protected]');
HomeController.php
public function neworder()
{
return View::make('neworder');
}
public function submitorder()
{
$order = new Order;
$order->name = Input::get('name');
$order->email = Input::get('email');
$order->save();
$orders = Order::all();
return View::make('orders')->with('orders', $orders);
}
neworder.blade.php
@extends('layout')
@section('content')
{{ Form::open(array('action' => '[email protected]')) }}
<?php
echo Form::text('email');
echo Form::text('name');
echo Form::submit('Submit');
?>
{{ Form::close() }}
@stop
わからない
0
レビュー
答え :
解決策:
あなたが持っているものが機能しているように聞こえますが、それは素晴らしいことです。ただし、いくつかの改善を行うことができます。
そのうちの1つは、リポジトリパターンを実装することです。これにより、コントローラーのコードが次のように変更されます。
public function submitorder()
{
if($this->_orderRepository->save(Input::all()) {
$orders = $this->_orderRepository->all();
return View::make('orders')->with('orders', $orders);
} else {
return View::make('orders')->with('errors', $this->_orderRepository->errors());
}
}
上記のコードは、検証ロジックが注文リポジトリ内にあることを前提としています。これは許容できますが、単一責任の原則に反します。リポジトリは、データベースでエンティティを作成/取得/更新する方法のみを知っている必要があります。代わりに、検証はバリデーターサービス
内で行うことができます検証サービスを実装する場合、上記の submitorder
関数( $this->_orderRepository->save
$this->_orderForm->save
)を呼び出すことになりますが、これはすばらしい兆候です。これにより、コントローラーの内部のロジックが簡潔に保たれ、フィールドを追加して注文モデルに変更を加えても、コントローラーへの影響はまったくありません。また、夜更かしをしているわけではないので、感情的にはるかに良い場所にいます。あなたのものは壊れそうです。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。