如何将数组存储到会话中并在Laravel中调用它?

时间:2017-05-03 03:36:35

标签: arrays forms laravel session controller

我有一些表格

 <form action="users/registration/new_user" method="post" class="new_user" enctype="multipart/form-data" novalidate="novalidate">
    <div class="col-md-12 col-sm-12 col-xs-12 no-padding">
            <div class="form-group col-md-2 col-sm-6 col-xs-12">
                 <label for="" class="dis-block">姓 <span class="text-error">※</span></label>
                  <input name="user_last_name" type="text" class="form-control" required="required">
            </div>
            <div class="form-group col-md-2 col-sm-6 col-xs-12">
                 <label for="" class="dis-block">名 <span class="text-error">※</span></label>
                  <input name="user_first_name"  type="text" class="form-control" required="required">
            </div>
        </div>
       <div class="col-md-12 col-sm-12 col-xs-12 no-padding">
                 <div class="form-group col-md-4 col-sm-6 col-sm-6 col-xs-12 ch-width-100">
                      <label for="" class="dis-block">Email <span class="text-error">※</span></label>
                      <input name="user_email" type="email" class="form-control" required="required">
                 </div>
            </div>       
 </form>

在我的控制器上

 public function postRegister(Request $request)
        {
           Session::put('user',['user_last_name'=>$request->user_last_name,'user_first_name'=>$request->user_first_name,'user_email'=>$request->user_email)]);  
           //Try echo to try it out
           echo Session::get('user'); 
        }  

错误

  ErrorException in SignupController.php line 146:
   Array to string conversion

现在我必须将数组保存到Session中,当我需要调用它时,可以通过foreach调用值。 谢谢大家!

2 个答案:

答案 0 :(得分:2)

当你这样做时

Session::put('user', [...]);

有效。您的错误来自

echo Session::get('user');

您正在尝试'回显'数组。替换为

dd(Session::get('user'));
// or 
print_r(Session::get('user'));

要在foreach中使用它,只需执行

if ( Session::has('user')) {
    foreach(Session::get('user') as $prop) {
        echo $prop;
    }
}

<强>更新

您要保存的用户是一个简单的数组。但似乎你真的想要一个物体。您应该像这样更改保存方式:

$user = (object) [
    'user_last_name'=>$request->user_last_name,
    'user_first_name'=>$request->user_first_name,
    'user_email'=>$request->user_email
];

// or simply try like this
$user = (object) $request->all();

// or if you have a user Model 
$user = new User($request->all());

然后将其保存在会话中

Session::put('user', $user);

最后,您可以在任何地方将其用作对象

$user = Session::get('user');
echo $user->user_last_name;

答案 1 :(得分:0)

对于 Laravel 8,session 不再是一个带有静态方法的类,而是 helpers.php 中的一个简单函数,可以根据指定的参数获取/设置会话值。您也可以通过请求对象访问会话,如下所述:

https://laravel.com/docs/8.x/session