从Laravel中的函数内部调用函数

时间:2014-07-20 11:21:48

标签: php codeigniter laravel

本周我决定从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(...));

任何人都知道问题的解决方案?或者我可能做错了什么?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

问题#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

的更多信息

问题#2

如果用户重新加载页面,表单将被清除,所以我们希望您显示错误?