单页上有两种形式,一种在 laravel 中不起作用
Two forms on single page, one doesn't work in laravel
我在同一页面上有两个联系表(bootstrap 模态 window)。问题是其中之一无法正常工作,并且 return 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!');
}
我在 blade 模板中拥有的是表单
{{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
return 错误 404。
我也试过在 web.php 中使两条路由都像 Route::post('/',....
,但是页面 return 错误是找不到 b2b_contact
路由。
那么,谁能帮我解决如何在同一页面上放置 2 个联系表单以及何时提交它们以重新加载页面并显示成功消息?
更新:这是我提交页面时看到的,是的,调试设置为 true
Not Found
The requested URL /applyNow was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
更新 2:.htaccess
文件在 public 目录中
<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
.
提供 public 文件夹
进行上述设置并单击表单 link 您的浏览器会尝试 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
而是 /
- 那是你的虚拟主机根目录。根据您对初始 post 的评论,您的 Laravel 安装(vendor
文件夹等)似乎位于 /var/www/html
内,并且您正在调用 public
目录。我对此不是 100% 确定,但请尝试修复您的目录结构。
我在同一页面上有两个联系表(bootstrap 模态 window)。问题是其中之一无法正常工作,并且 return 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!');
}
我在 blade 模板中拥有的是表单
{{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
return 错误 404。
我也试过在 web.php 中使两条路由都像 Route::post('/',....
,但是页面 return 错误是找不到 b2b_contact
路由。
那么,谁能帮我解决如何在同一页面上放置 2 个联系表单以及何时提交它们以重新加载页面并显示成功消息?
更新:这是我提交页面时看到的,是的,调试设置为 true
Not Found
The requested URL /applyNow was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
更新 2:.htaccess
文件在 public 目录中
<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
.
进行上述设置并单击表单 link 您的浏览器会尝试 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
而是 /
- 那是你的虚拟主机根目录。根据您对初始 post 的评论,您的 Laravel 安装(vendor
文件夹等)似乎位于 /var/www/html
内,并且您正在调用 public
目录。我对此不是 100% 确定,但请尝试修复您的目录结构。