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

Php 从Laravel中的函数内部调用函数,php,codeigniter,laravel,Php,Codeigniter,Laravel,本周我决定从CodeIgniter搬到Laravel。 Atm我正试图将我的旧CI网站“迁移”到Laravel 注意:我对拉威尔很陌生,所以如果我做错了什么,请说:) 我已经习惯了CodeIgniter,我甚至不知道这在Laravel是否有效 下面是我希望它的样子/就像我在codeigniter中看到的那样--> 如果$validator失败,我希望它调用$this->add();再一次。 注意:我试过做以下几点 return Redirect::to('users/add')->with

本周我决定从CodeIgniter搬到Laravel。 Atm我正试图将我的旧CI网站“迁移”到Laravel

注意:我对拉威尔很陌生,所以如果我做错了什么,请说:) 我已经习惯了CodeIgniter,我甚至不知道这在Laravel是否有效

下面是我希望它的样子/就像我在codeigniter中看到的那样-->

如果$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()时;它调用函数,但不执行函数内的代码,不创建视图,也不将所有$数据传递给视图

而且,如果我创造

protected $layout = "layouts.master"; 
它将使用那个,而不是

return View::make('users.create', $data);
但不会向其传递$数据

问题2:使用重定向::to()的问题;如果用户重新加载页面,则所有输入::old();从withInput()和withErrors()开始消失;使用会话来存储数据,并且它只持续一个请求,错误也会消失。 包括输入周围/上的CSS

注意:我尝试使用以下两种方法:

Session::reflash();
Session::keep(array(...));
有人知道这个问题的解决办法吗?或者我可能做错了什么

感谢您的帮助

问题1 您的代码可能正在执行,但并没有从函数返回视图

if ($validator->fails())
{
    return $this->add();
}
无论如何,你应该坚持单一责任原则。而不是调用
$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::
,将来在中将允许您更好地测试代码,因此编写代码是一个很好的练习。你可以进一步了解国际奥委会

问题2
如果用户重新加载页面,表单将被清除,因此我们希望您显示错误

请注意,确定您在这里试图做什么,但我做了,我得到了一个错误
Illumb\Database\Eloquent\MassAssignmentException-_token
,不完全确定如何使用
App::make()及其作用。我在用户模型上设置了错误的属性,它应该是
可填充的
。您可以在这里获得更多信息,似乎您正在尝试使用
App::make('User')->addUser(Input::all())
是将用户添加到数据库中,这不是我现在要做的,是吗?如果$validator失败,我希望它再次加载表单页面并显示旧的输入和错误消息。您现在所做的是在验证失败时将空用户添加到数据库中。失礼。要快速修复问题,只需在
$this->add()
之前添加
return
语句,就像我说的那样。啊,没有看到您做了那个更改。#1使用
重定向::To
重定向::back()
#2为什么这是一个问题?如果use重新加载页面,那么应该重新加载,不是吗?如果我
Redirect::to()->withInput->()->withErrors()然后1)如果视图文件中没有成吨的if语句,我将无法获得有关输入的CSS。2) 如果用户重新加载页面(无论出于何种原因),所有旧输入都会消失,错误也会消失,因为
->withInput()
->withErros()利用会话,这意味着数据只能持续一个请求,如果需要,我希望它能够持续几个请求,这就是为什么我还尝试使用
session::reflash()
会话::keep()1使用单个css类,不需要大量的if语句。2我理解,这就是它应该如何工作的——就像我说的,如果用户重新加载页面,那么页面应该重新加载。这就是我的看法。1)我仍然需要一个if语句来确定我是否需要/想要添加CSS类,还是我错了?2) 当然可以,但我也希望旧的输入保持不变,错误也保持不变。@deczo类似这样的话,我需要if语句来确定需要添加哪些css类,字段是否被批准或包含错误(使用Bootstrap css仅供参考)。
class User extends \Eloquent
{
     public $fillable = ['email', 'username']; //protected data from assigment by user manually

     public function addUser(array $input)
     {
         return $this->create($input);
     }
}