Две формы на одной странице, одна не работает в laravel - PullRequest
0 голосов
/ 12 апреля 2019

У меня две контактные формы на одной странице (модальное окно начальной загрузки). Проблема в том, что один из них работает неправильно и возвращает ошибку 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 контактные формы на одной странице и когда они отправлены, чтобы перезагрузить страницу и показать сообщение об успехе?

ОБНОВЛЕНИЕ: это то, что я вижу, когда я отправляю страницу, и да, для debug установлено значение 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>

1 Ответ

1 голос
/ 12 апреля 2019

Я попробовал ваши настройки локально с 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.Я не уверен на 100% в этом, но попробуйте исправить структуру каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...