本周我决定从CodeIgniter搬到Laravel。 Atm我正在尝试将我的旧CI网站“迁移”到Laravel。
注意:我对Laravel很新,所以如果有什么我做错了请说:) 我习惯了CodeIgniter,我甚至不知道这是否适用于Laravel。
以下是我希望它/我在codeigniter中拥有它的方式 - > http://pastebin.com/DRaW0Mzt
public function add()
{
$data['header'] = "Create New User";
$data['title'] = "Create New User";
$data['description'] = "Create New User";
$data['user_groups'] = UserGroup::all();
return View::make('users.create', $data);
}
function create()
{
$validator = Validator::make(
array(
'email' => Input::get('email'),
'username' => Input::get('username'),
),
array(
'email' => 'required|email|unique:users',
'username' => 'required|min:3|max:14|unique:users',
)
);
if ($validator->fails())
{
/* If there's an error then just call the add function again */
/* $validator->messages(); should still be available since it is still the same "instance" */
/* This is how i did it on CodeIgniter */
$this->add();
}else{
/* success code... */
}
}
如果$ validator失败,我希望它调用$ this-> add();再次。 注意:我尝试过以下操作;
return Redirect::to('users/add')->withInput()->withErrors($validator); # redirect to users/add, WITH the old input and WITH the errors from $validator. */
问题#1:调用$ this-> add();它调用函数,但它不执行函数内部的代码,不创建视图,并且所有$ data都不会传递给视图。
而且,如果我创造;
protected $layout = "layouts.master";
它将使用那个而不是;
return View::make('users.create', $data);
但是没有$数据传递给它。
问题#2:使用Redirect :: to()的问题;是用户重新加载页面然后所有Input :: old();因为withInput()和withErrors();使用会话来存储数据,它只持续一个请求,错误也消失了。 包括输入https://dl.dropboxusercontent.com/u/11204765/SS/SS-026.png
周围的CSS注意:我尝试使用以下两种方法;
Session::reflash();
Session::keep(array(...));
任何人都知道问题的解决方案?或者我可能做错了什么?
感谢任何帮助!
答案 0 :(得分:1)
您的代码可能正在执行,但您不会从您的函数返回视图。
if ($validator->fails())
{
return $this->add();
}
无论如何,你应该坚持使用Single Responiblity Principale。而不是调用$this->add();
将您的业务逻辑移动到模型。
if ($validator->fails())
{
App::make('User')->addUser(Input::all());
return View::make('users.create', $data);
}
并在您的用户模型中添加函数addUser
class User extends \Eloquent
{
public $fillable = ['email', 'username']; //protected data from assigment by user manually
public function addUser(array $input)
{
return $this->create($input);
}
}
App:make('User')
几乎与仅调用User::
相同,将来可以让您更好地测试代码,因此编写它是一种很好的做法。您可以了解有关IOC here
如果用户重新加载页面,表单将被清除,所以我们希望您显示错误?