[英]Laravel 4 database actions - controller or model
剛開始使用Laravel,但要確保我正確使用了它。
我的大部分工作是基於CMS的,因此對數據庫進行讀/寫/更新等操作。
到目前為止,我所做的一個例子是插入數據庫:
在視圖上,我有一個URL為'addNewUser'的表單。
然后在我的路線中:
Route::post('addnewuser', array('uses' => 'UserController@addNewUser'));
我的用戶控制器“ addNewUser”方法為(簡化):
public function addNewUser() {
$data = Input::all();
$rules = array(
'username' => 'required|alpha_dash|max:16|unique:users,username',
);
$validator = Validator::make($data, $rules, $messages);
if ($validator->fails())
{
Input::flash();
$errors = $validator->messages();
return Redirect::to('/register')->withErrors($validator)->withInput();
}
$user = new User;
$user->save();
return Redirect::to('/login')->with('successLogin', '1');
}
這個對嗎? 我讀過某個地方所有數據庫交互都應該在模型中?
同樣,從數據庫讀取以顯示foreach時,例如,我直接在視圖中執行以下操作:
$builds = DB::table('blogs')->orderBy('id', 'desc')->get();
if ($builds) {
foreach ($builds as $build)
{
$safeURLSlug = stringHelpers::safeURLSlug($build->blogtitle);
echo "
// stuff
";
}
} else {
// no stuff
}
我應該進行此類查詢並直接在視圖中顯示數據嗎? 或在模型/控制器功能等中?
我想參與進來之前,要檢查即時消息處理服務是否100%正確/標准的處理方法。
我可以看到一些我個人會做的不同的事情。
例如,我通常將$rules
用作類變量,以便可以在與您的Users相關的不同功能中使用它。
您已經測試過代碼了嗎? 有什么錯誤嗎?
在您的addNewUser
函數中,它是否保存任何數據? 我知道您已經在代碼段上方“簡化了”,但是應該有$user->username = $data['username'];
在創建$user
變量和運行$user->save();
等等$user->save();
,因此,如果您有意排除此情況,那么您的模型將看不到其他任何內容。
在您的視圖代碼中, $builds = DB::table('blogs')->orderBy('id', 'desc')->get();
應該在您的控制器中完成並傳遞給您的視圖,例如return View::make('example', array('builds' => $builds))
我也會改變
$builds = DB::table('blogs')->orderBy('id', 'desc')->get();
至
$builds = Blog::orderby('id','desc')->get();
如果您具有Blog
模型,則您的代碼很好。
您可以移動:
$rules = array(
'username' => 'required|alpha_dash|max:16|unique:users,username',
);
用戶模型作為靜態變量,而不是:
$validator = Validator::make($data, $rules, $messages);
您可以使用:
$validator = Validator::make($data, User::$rules, $messages);
但是絕對不應該在View中從數據庫中獲取數據,此代碼應該在控制器中,例如:
$builds = DB::table('blogs')->orderBy('id', 'desc')->get();
return View::make('someview')->with('builds', $builds);
當然,如果您具有Blog
模型,則應在此處使用:
$builds = Blog::orderBy('id', 'desc')->get();
return View::make('someview')->with('builds', $builds);
還不清楚以下代碼的作用:
$safeURLSlug = stringHelpers::safeURLSlug($build->blogtitle);
但可能您可以將其移至Blog
模型並使用accessor進行更改:
public function getSafeSlugAttribute($value) {
return stringHelpers::safeURLSlug($this->blogtitle);
}
現在您的視圖應如下所示:
@foreach ($builds as $build)
{{{ $build->title }}} {{{ $build->safeSlug }}}
@endforeach
我建議您看一下Laravel Generators。
https://github.com/JeffreyWay/Laravel-4-Generators
安裝並運行:
php artisan generate:scaffold customer
Laravel行命令生成器通過控制器,模型,視圖和數據庫遷移為您創建基本的CRUD。 這樣可以確保安全的時間,並讓您的項目使用默認的組織機構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.