Laravel action() ne ustvari pravilnega url
 
thai 17. jul 2015 06:51:17 Pridružen od:
14. dec 2014
81 objav
32 31 2
#1

Laravel "helper function" action() ne generirala pravilnega url-ja v primeru create metode.



Zapisano imam na primer


action('KrnekiController@create', [0])

Generira se url...



url_pot?0



Seveda bi lahko zapisal


action('KrnekiController@create', ['id' => 0])

in bi se generiral url...



url_pot?id=0



ampak ni to to. Želim, da se generira takšen url kot ga action() genrira pri vseh ostalih privzetih "resource" metodah s parametri ali pri custom metodah. Vedno se generira pravilni url (url_pot/0) le pri tej privzeti besedi "create" me zajebava.



V routes.php sem definiral pravilni route


Route::get('kr_neki/create/{id}', 'KrnekiController@create');
Route::resource('kr_neki', 'CategoriesController');

Če ne bom našel nobene druge rešitve, pač ne bom uporabil action() ampak bom v *.blade.php ročno zapisal celoten url in potem lepo delujem ampak je potem to spet tako tako, če se kasneje odločim spremeniti url v routes.php moram potem pot spremeniti tudi v blade (lahko bi pa tudi metodo preimenoval in potem deluje ampak to spet ni to).



Id v create metodi nujno potrebujem, ne vem, kako je sicer to v skladu z dobro prakso ampak ga potrebujem.


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
bostjan 17. jul 2015 14:55:18 Pridružen od:
31. jul 2008
643 objav
689 30 9
#2

Tole maš nekje drugje napako. Testiral točno tvojo kodo in deluje popolnoma ok. Z "action('KrnekiController@create', ['id' => 0])" dobim "/kr_neki/create/0".



Boš moral kaj več pokazat ali pa raziskat kje drugje imaš napako.


všeč(1) ni všeč(1) spam(0)
 
thai 17. jul 2015 16:04:56 Pridružen od:
14. dec 2014
81 objav
32 31 2
#3

Deluje, če nimam zapisano resource, ampak routes definiram sam.



Recimo, če zapišem


Route::get('kr_neki/create/{id}', 'KrNekiController@create');
Route::resource('kr_neki', 'KrNekiController');

Ne deluje



Če zapišem


Route::get('kr_neki/create/{id}', 'KrNekiController@create');
Route::get('kr_neki/{id}', 'KrNekiController@show');
Route::get('kr_neki/{id}'', 'KrNekiController@destroy');
....

pa deluje :/



Ampak mi je malo mimo, da bi moral zdaj ročno zapisati vse routes samo zato, ker bi rad v create vključil parameter :/



Po moje v prvem primeru ne bi smelo biti težav, ker je Route::get('krneki/create/{id}', 'KrNekiController@create') zapisan nad Route::resource(...) ampak ga očitno ne prepiše. Lahko preveriš, če se tebi zgodi podobno (1. primer -- pod Route::get('krneki/create/{id}', 'KrNekiController@create'); zapišeš še Rote::resource(...))? 2x sem preveril imena in sem vse prav zapisalo tako da mi ni jasno v čem je težava.


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
thai 17. jul 2015 16:24:43 Pridružen od:
14. dec 2014
81 objav
32 31 2
#4

Ali si mogoče že v prvo preveril z resource() in ti deluje? :/



(uporabljam Laravel 5.1)


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
bostjan 17. jul 2015 16:49:27 Pridružen od:
31. jul 2008
643 objav
689 30 9
#5

čaki čaki to pa malo spremeni.....ti imaš 2 route v isti controller na isti action.



Ne da se mi poganjat vagranta zdele (lahko kasneje zvečer), toda preveri če daš resource kot:


Route::resource('neki', 'NekiController', ['except' => ['create']])

glede na to da definiraš že tam route. Drugače pa oni prvi ruti daj ime ('as' => 'neki') in potem kliči helper route('neki', ['id' => 123])


všeč(1) ni všeč(0) spam(0)
 
thai 17. jul 2015 17:52:34 Pridružen od:
14. dec 2014
81 objav
32 31 2
#6

Odlično, sedaj, ko sem create "vrgel" ven iz resource z except, pa deluje :) Očitno da Laravel prednost resource (v tem primeru ne bere od vrha navzdol v routes.php) in če ima določen Controller tega definiranega, bo najprej pogledal za Action (KrnekiController@create) znotraj resource, dobil URI (krneki/create) in ker ni definiranega {parametra}, kreiral "napačen" url - krneki?id=97, če si prav to razlagam... Sedaj, ko sem to odstranil, pa pravilno pogleda v Route::get('krneki/create/{id}', 'CategoriesController@create'); in seveda generilia pravilen url krneki/97. Super, hvala ti za pomoč :)


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
bostjan 17. jul 2015 20:37:49 Pridružen od:
31. jul 2008
643 objav
689 30 9
#7

Problem je ker si ti določil 2 ruti na 1 action. V tem primeru je šlo po vrsti in ti je resource povozil tvojo.

Laravel v ozadju gradi array, ki ima kot key class@action, in ko ti kličeš action() on ve katera ruta je to. Ker pa si ti imel 2* podan isti action ti je vzel zadnjega (torej resource). Ta pa seveda ni imel idja.



Simpl. ;)


všeč(1) ni všeč(0) spam(0)
 
thai 17. jul 2015 21:11:20 Pridružen od:
14. dec 2014
81 objav
32 31 2
#8

Aha, pa res. Torej tole ne dela tako kot bi želel


Route::get('kr_neki/create/{id}', 'KrnekiController@create');
Route::resource('kr_neki', 'KrnekiController');

če obrnem vrstni red, pa dela :)


Route::resource('kr_neki', 'KrnekiController');
Route::get('kr_neki/create/{id}', 'KrnekiController@create');

Ampak bom raje kar ostal pri except :)


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se