【问题标题】:Two forms on single page, one doesn't work in laravel单页上的两个表单,一个在 laravel 中不起作用
【发布时间】:2019-04-12 11:59:31
【问题描述】:

我在同一页面上有两个联系表格(引导模式窗口)。问题是其中一个不能正常工作并返回404 Not Found 错误。

我有这个在web.php

Route::post('/b2b_contact','HomeController@b2b_contact')->name('b2b_contact');
Route::post('/','HomeController@contact')->name('contact');

HomeController.php 函数

public function contact(Request $request)
{ 

    $data = array(
        'first_name' => $request->first_name,
        'company_name' => $request->company_name,
        'country'  => $request->country,
        'email'  => $request->email,
    );

    DB::table('contact')->insert($data);         
    return Redirect::to('/')->with('message', 'Thank you!');
}

public function b2b_contact(Request $request)
{ 

    $data = array(
        'first_name' => $request->first_name,
        'company_name' => $request->company_name,
        'country'  => $request->country,
        'email'  => $request->email,
    );

    DB::table('b2b_contact')->insert($data);         
    return Redirect::to('/')->with('message', 'Thank you!');
}

我在刀片模板中拥有的是表单

{{Form::open(array('route'=>'b2b_contact','files' => true,'method'=>'post', ))}}

// input fields here

{{Form::close()}}  

{{Form::open(array('route'=>'contact','files' => true,'method'=>'post', ))}}

// input fields here

{{Form::close()}}  

第二种形式 contact 工作正常,但 b2b_contact 返回错误 404。

我也尝试在 web.php 中创建两个路由,例如 Route::post('/',....,但随后页面返回错误,即找不到 b2b_contact 路由。

那么,任何人都可以在这里帮助我如何在同一页面上有 2 个联系表单,以及何时提交它们以重新加载页面并显示成功消息?

更新:这是我在提交页面时看到的,是的,调试设置为 true

未找到

在此服务器上找不到请求的 URL /applyNow。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

更新 2:.htaccess 公共目录中的文件

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

【问题讨论】:

  • Laravel 日志中的任何内容?
  • 日志中没有任何内容
  • 您是否在.env 中启用了调试功能?您可以将dd(1) 放在b2b_contact 方法的顶部并重试提交表单吗?如果您在浏览器中收到1,请告诉我。
  • 我已经用页面截图更新了我的问题。
  • 这个错误看起来不像是通过 laravel(可能是一个错误的域)。 URL 也是/applyNow,它在您的代码中不可见。您如何/在哪里导航到/applyNow

标签: php laravel laravel-5.6


【解决方案1】:

我使用 Laravel 5.8 和 XAMPP 在本地尝试了您的设置。当我将 Laravel 项目复制到 /htdocs 时,我到 Laravel 主页的路径是 /htdocs/public。在浏览器中我必须输入http://localhost/public/ 或者我需要将Apache 配置更改为,例如,通过laravel.local 提供公用文件夹。

进行上述设置并单击表单链接,您的浏览器会尝试 POST 到此 URL:http://localhost/b2b_contact - 这不存在,因为我们需要 POST 到 http://localhost/public/b2b_contact

为什么它适用于/contact 而不适用于/b2b_contact

在您的路由文件中,您可以按如下方式定义路由:

Route::post('/b2b_contact','HomeController@b2b_contact')->name('b2b_contact');
Route::post('/','HomeController@contact')->name('contact');

/contact 路由甚至不叫contact 而是/ - 那是你的虚拟主机根目录。根据您对初始帖子的评论,您的 Laravel 安装(vendor 文件夹等)似乎位于 /var/www/html 内部,并且您正在调用您的 public 目录。我对此不是 100% 确定,但请尝试修复您的目录结构。

【讨论】:

  • 问题出在 .htaccess 和重定向中。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 2015-01-16
  • 2012-07-19
  • 2020-11-11
相关资源
最近更新 更多