刚开始使用Laravel,但想确保我正确使用它。
我的大部分工作都是基于CMS的,因此可以读/写/更新等数据库。
到目前为止,我所做的一个例子是插入数据库:
在视图中,我有一个表格,网址为' 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');
}
这是对的吗?我在某处读过所有数据库交互都应该在模型中?
同样,当从DB读取以显示例如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%正确/标准做事方式。
答案 0 :(得分:1)
我可以看到一些我个人会做的事情。
例如,我通常将$rules
作为类变量,因此可以在与用户相关的不同功能中使用。
您是否测试了代码?有错误吗?
在addNewUser
功能中,它会保存所有数据吗?我知道你已经简化了#34;在代码段上方,但在创建$user->username = $data['username'];
变量和运行$user
之间应该有$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
型号,否则您的代码就可以了。
答案 1 :(得分:1)
你可以搬家:
$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
答案 2 :(得分:0)
我建议你看看Laravel Generators。
https://github.com/JeffreyWay/Laravel-4-Generators
安装然后运行:
php artisan generate:scaffold customer
Laravel line命令生成器为您创建一个基本的CRUD,包括控制器,模型,视图和数据库迁移。这对安全时间有好处,并使您的项目与某个默认组织保持一致。