【发布时间】:2014-12-02 16:05:20
【问题描述】:
刚开始使用 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% 正确/做事的标准方式,以免我太投入。
【问题讨论】:
-
不,如果您希望代码可重用,则不应在控制器中完成。试想一下,您还有另一个添加用户的理由,例如。
/users/add_batch,那么你需要为这个新控制器重写所有这些东西。或者您希望在命令行中执行此操作(工匠 cron 作业或其他) - 您需要再次重写这些内容。相反,最好创建一个服务,一个模型上的方法(任何适合你的)来处理这个任务并在你的控制器/cli中重用它。
标签: php laravel laravel-4 eloquent