Laravel - как да взема post в базовия URL с Route?

Fix

New Member
Здравейте,

Нужна ми е малко помощ за Laravel 4.2. Искам да мога да обработвам post-заявки, когато са насочени към главния URL, без да има index.php в адреса
Примерно адреса, където ми е инсталиран Laravel е:
http://localhost/tmp/laravel/

Съдържанието на app\routes.php ми е:
PHP:
Route::get('/', function()
{
	return View::make('form');
});

Route::post('/', function()
{
	print_r($_POST);
});
Имам една форма във View - form.blade.php. Тя се зарежда по подразбиране в базовия URL "/". Ако събмитна формата без да съм изписал index.php в адреса и не се случва нищо, просто страницата с формата се зарежда отново.
Ако заредя страница с индекс:
http://localhost/tmp/laravel/index.php
, тогава всичко работи нормално. В този случай print_r() принтира post-елементите.

Има ли някакъв начин да накарам обработването на post-заявка от главната страница? Със сигурност има, но явно аз нещо бъркам. Някакви идеи?
 
От: Laravel - как да взема post в базовия URL с Route?

Аз правя следното:

В route.php
Код:
Route::post('/', array('as' => 'postHome', 'uses' => 'HomeController@index'));

В form.blade.php
Код:
<form action="{{ URL::route('postHome') }}" method="POST">
    input-и разни...
</form>

Така, когато си задаваш имена на пътищата, всеки път, когато ти смениш адреса, ще ти го променя автоматично и в View-то. Например речеш в един момент, че тая форма трябва да се намира вместо на / в /form, то автоматично в view-то адреса на action-а ще ти се смени от sait.com на sait.com/form и формата няма да се счупи.
 
От: Laravel - как да взема post в базовия URL с Route?

А като видиш генерираната форма, къде е екшъна?

Трябва да е нещо такова (празно, а не index.php):
{{ Form::eek:pen(array('url' => '')) }}
...
{{ Form::close() }}
 
От: Laravel - как да взема post в базовия URL с Route?

@Virosss, благодаря за идеята! Само, че пак е същата история. Аз използвам Form-хелпера. С твоята идея става така:
PHP:
{{Form::open(array('url'=>URL::route('postHome'),'method'=>'post'))}}
Но и в този случай пак се получава същият резулат - post-заявката не се обработва. На практика в сорс-кода адреса е същият:
HTML:
<form method="POST" action="http://localhost/tmp/laravel" accept-charset="UTF-8">
 
От: От: Laravel - как да взема post в базовия URL с Route?

А като видиш генерираната форма, къде е екшъна?

Трябва да е нещо такова (празно, а не index.php):

Доколкото си спомням нещо се чупеше, когато оставиш action-а празен, но може и да се бъркам... скоро не съм човъркал Laravel-а. Възможно е и да не е задал method и от там да се чупи, иначе по принцип би трябвало дори и с празен action по подразбиране да ползва текущият адрес, но.. знам ли :) Аз за всеки случай си слагам текущият адрес.
 
От: Laravel - как да взема post в базовия URL с Route?

Открих един начин да работи. Посочвам му точно към кой файл да е екшъна:
PHP:
{{Form::open(array('url'=>'/index.php','method'=>'post'))}}

Ако го оставя
PHP:
'url'=>'/'
или
PHP:
'url'=>''
не работи.
И мен хич не ме кефи, да посочвам конкретен php-адрес, но поне за сега друго не помага.
 
От: Laravel - как да взема post в базовия URL с Route?

Малко глупав въпрос, но дали имаш .htaccess файл с следното съдържание:

Код:
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Ако нямаш, създай си един и пробвай пак без index.php
 
От: Laravel - как да взема post в базовия URL с Route?

Малко по-различен ми беше .htaccess-a. Но го промених с твоето предложение и пробвах. Същата работа - само рефрешва.
 
От: Laravel - как да взема post в базовия URL с Route?

Намерих още едно странно решение, което работи. Втория отговор тук:
http://stackoverflow.com/questions/17511653/laravel-form-post-issue

Оставя се шпация в адреса на екшъна:
'url' => ' '
Никога не бих се сетил. Само, че пак не ми изглежда добро решение. Все пак ще го използвам за сега.
Ако се сетите за по-качествено решение, пишете - ще го пробвам.
 
От: Laravel - как да взема post в базовия URL с Route?

Има още 2 начина за формата:

echo Form::eek:pen(array('route' => 'route.name'))

echo Form::eek:pen(array('action' => 'Controller@method'))

Виж генерирания HTML - все един от тях трябва да е правилен. Подозирам, че това има някаква връзка с това как си дефинираш пътишата в routes и дали си пускал оная скапана опция за trailing slash-а.
 

Горе