繁体   English   中英

一页上有两种形式,一种在laravel中不起作用

[英]Two forms on single page, one doesn't work in laravel

我在同一页面上有两个联系表单(引导程序模式窗口)。 问题是其中之一无法正常工作,并返回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 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而是/ -这是您的vhosts根目录。 根据您对初始帖子的评论,您的Laravel安装( vendor文件夹等)似乎位于/var/www/html并且您正在调用public目录。 我对此不太确定,但请尝试修复您的目录结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM