刚开始使用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
作为类变量,以便它可以用于与您的用户相关的不同函数中。
你测试过你的代码吗?有什么错误吗?
在您的addNewUser
函数中,它是否保存任何数据?我知道您在代码片段上方进行了"简化",但在创建$user
变量和运行$user->save();
之间应该有$user->username = $data['username'];
等,所以如果您故意排除了这一点,那么我看不到您的模型的其他内容。
在您的视图代码中,$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);
但绝对不应该从视图中的数据库中获取数据,此代码应该在控制器中,例如:
$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发电机。
https://github.com/JeffreyWay/Laravel-4-Generators
安装然后运行:
php artisan generate:scaffold customer
Laravel线路命令生成器通过控制器,模型,视图和数据库迁移为您创建基本的CRUD。这有利于节省时间并将您的项目保留在某些默认组织中。