当前位置: 首页 > 知识库问答 >
问题:

ProfileController@store不是发送post方法,也不会将任何数据保存到配置文件表

柴阳云
2023-03-14

我是PHP和Laravel的新手。我使用的是Laravel框架5.3版。29和7

我正在制作包含两部分的扩展登记表。制作登录凭证的登记表;用户名和密码,在创建登录凭据之后,第二部分是为新用户创建配置文件。

过程:注册表单,保存数据到用户表,使用用户模型。成功创建用户名后

配置文件窗体正在使用配置文件模型。

1) 当数据已通过post方法发送且没有错误消息时,如何进行故障排除。只有在按下提交按钮后,它才会返回到配置文件表单。

2) 我可以看到没有数据保存到配置文件表。

寄存器(用户表)和配置文件表位于同一数据库中,因为寄存器表单可以保存它,数据库部分工作正常。

代码骨架已经从"php工匠make: auth完整的代码可以找到https://github.com/mikromika/project1/

我的路由文件如下:

// Registration Routes
Route::get('auth/register', 'Auth\RegisterController@getRegister');
Route::post('auth/register', 'Auth\RegisterController@register');

// Show profile form
Route::get('bio/create', ['as' => 'bio.create', 'uses' => 'Bio\ProfileController@create']);

Route::post('bio/store', ['as' => 'bio.store', 'uses' => 'Bio\ProfileController@store']);

ProfileController:存储此数据应验证数据并将其保存到profile表中

        public function store(Request $request)

    {    $this->validator($request->all())->validate();
        $this->guard()->login($this->createx($request->all()));
       Session::flash('success', 'Data was successfully save!');

       if ($exception instanceof TokenMismatchException) {
         Session::flash('success', 'Data was failed to save!');
                return redirect('/auth/login');
       }

  //  show profile form info after success post; does not work yet
return redirect()->route('bio.show');  }

下面是一个发送post方法的配置文件表单。

<form id="profile-form"  action="{{ url('/bio/store')  }}" method="POST" form class="form-horizontal">
      {{ csrf_field() }}

Post方法永远不会到达ProfileController: store部分。

我尝试过使用“GET”方法,但我遇到了错误

MethodNotAllowedHttpException in RouteCollection.php line 218:

我已经改变了路线

Route::get('bio/store', ['as' => 'bio.store', 'uses' => 'Bio\ProfileController@store']);

和表单<代码>

因为表单需要通过“POST”方法发送,所以我理解这个错误!。

这里是ProfileController的验证部分:验证器

protected function validator(array $data)    // copied from register controller
  {
      return Validator::make($data, [

        'firstname'         => 'required|max:255',
        'lastname '         => 'required|max:255',
        'email'             => 'required|email|max:255|unique',
        'phone'             => 'integer',
        'mobile'            => 'integer',

      ]);
  }

这是ProfileController:createx part我从registerController获取的。

protected function createx(array $data)    //copied from register controller
  {                                          // was dublicate name "create"
      return Profile::createx([              // changed to "createx"
          'firstname' => $data['firstname'],
          'lastname' => $data['lastname'],


     ]);
  }

这是剖面模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
    //
      protected $table = 'profiles';
      protected $fillable = [
          'firstname',
           'lastname',
           'email',
           'phone',
           'mobile',
            // 'name', 'email', 'password',
      ];


      protected $hidden = [
          'status',
          //'location',
      ];
}

感谢Alexey Mezenin DD()提供的疑难解答提示

@MikroMika此数据表明您没有传递firstname和lastname。查看dd(数据)的结果;它应该类似于['firstname'=

现在我又回到了起点,

为什么表单不是通过POST方法传递数据?

共有1个答案

石超
2023-03-14

Eloquent中没有createx()方法。您在控制器中定义了它,但尝试将其用于模型。使用create()方法:

return Profile::create([
    'firstname' => $data['firstname'],
    'lastname' => $data['lastname'],
]);

此外,您还询问了如何进行故障排除。安装Laravel调试条。另外,使用dd()helper确实很有帮助:

dd(Profile::create([
    'firstname' => $data['firstname'],
    'lastname' => $data['lastname'],
]));
 类似资料:
  • 问题内容: 我有两个网站,一个是TLS,一个不是,这两个都是针对同一客户端的,但是我需要这些网站彼此(并且只能彼此)共享 用户 , 订单 , 帐户 等的通用数据。 通常可以使用数据完成此操作,但是我显然不能在其他站点上使用它们,而且我发现我可以将会话数据存储在数据库(MySQL)中,而不是文件系统中。 我已经四处搜寻,发现此有用的指南以及此较旧但 有用的指南。我还发现了该指南,该指南具有最新的My

  • 我收到的流数据()希望保存在S3中(基本上,对于这个问题,我希望将输出保存在哪里并不重要,但我只是为了以防万一而提到它)。 是否可以将每个(这些是JSON字符串)数据保存到JSON文件中,而不是文件夹中?我以为必须使用这个技巧,但它没有。

  • 我试图用json作为主体数据在jmeter中发布帖子,但我只得到了400。我发送到的URL只接受json。我在《邮差》中也用过同样的卷发,效果很好。我曾尝试将json作为一个没有名称的值放入参数中,但没有成功。 我只是想发送{“uid”:“jmtest”,“name”:“newdevice”}。 对不起,我不能发布更多的链接。 采样结果为 请求看起来像 响应数据为

  • 我正试图从解析通过模拟器中提取一个PDF文件,并保存到我的桌面上,当我的应用程序上的一个按钮被点击时。问题是,无论我做什么,文件不会出现在桌面或其他任何地方。我正在对下载按钮使用此方法 无法将其保存到桌面。

  • 问题内容: 我的entityManagerpersist()从序列中获取ID,并将其放入我的Image对象,但是Image对象本身未显示在数据库中。EntityManager.flush()给出错误,所以我不能以这种方式提交。这是我的代码。 问题答案: 这通常在未应用Transaction in时发生。我怀疑@Transactional拦截器没有正确拦截。

  • 问题内容: 尝试发送json。这是我的功能: 但是,每当我检查Chrome时,它总是将其作为查询参数发送: 如何获取以JSON格式发送的信息? 问题答案: 用 样品: 注意并非所有浏览器(http://caniuse.com/#feat=json)都支持JSON.stringify ,特别是IE7及更低版本的浏览器。 如果您也需要支持此浏览器,则可以使用以下Javascript库:https :