codezero-be / laravel-localized-routes

⭐️ A convenient way to set up and use localized routes in a Laravel app.
MIT License
491 stars 45 forks source link

Resource routes #65

Closed gpluess closed 1 year ago

gpluess commented 2 years ago

Great package! :)

When I define my routes explicitly like this...

Route::get(Lang::uri('companies'), [CompanyController::class, 'index'])->name('companies.index');
Route::get(Lang::uri('companies/create'), [CompanyController::class, 'create'])->name('companies.create');
Route::get(Lang::uri('companies/{company}'), [CompanyController::class, 'show'])->name('companies.show');
Route::get(Lang::uri('companies/{company}/edit'), [CompanyController::class, 'edit'])->name('companies.edit');
Route::post(Lang::uri('companies'), [CompanyController::class, 'store'])->name('companies.store');
Route::put(Lang::uri('companies/{company}/'), [CompanyController::class, 'update'])->name('companies.update');
Route::delete(Lang::uri('companies/{company}/'), [CompanyController::class, 'destroy'])->name('companies.destroy');

... everything works as expected:

GET|HEAD  de/unternehmen ............................ de.companies.index › CompanyController@index
POST      de/unternehmen ............................ de.companies.store › CompanyController@store
GET|HEAD  de/unternehmen/hinzufügen ................. de.companies.create › CompanyController@create
GET|HEAD  de/unternehmen/{company} .................. de.companies.show › CompanyController@show
PUT       de/unternehmen/{company} .................. de.companies.update › CompanyController@update
DELETE    de/unternehmen/{company} .................. de.companies.destroy › CompanyController@destroy
GET|HEAD  de/unternehmen/{company}/bearbeiten ....... de.companies.edit › CompanyController@edit

But when I use the shorthand...

Route::resource('companies', CompanyController::class)

... the routes are not translated correctly:

GET|HEAD  de/companies .............................. de.companies.index › CompanyController@index
POST      de/companies .............................. de.companies.store › CompanyController@store
GET|HEAD  de/companies/create ....................... de.companies.create › CompanyController@create
GET|HEAD  de/companies/{company} .................... de.companies.show › CompanyController@show
PUT|PATCH de/companies/{company} .................... de.companies.update › CompanyController@update
DELETE    de/companies/{company} .................... de.companies.destroy › CompanyController@destroy
GET|HEAD  de/companies/{company}/edit ............... de.companies.edit › CompanyController@edit

And this is what my /lang/de/routes.php looks like:

return [
    'companies' => 'unternehmen',
    'create' => 'hinzufügen',
    'edit' => 'bearbeiten',
];

What am I doing wrong? Is it even possible to use Route::resource() with this package?

ivanvermeyen commented 2 years ago

Hi,

When you use Route::resource(), you never call Lang::uri(), because it only accepts single URI's. To enable resource URI's, we would need to override Route::resource(). This may be possible, but it's not supported at the moment.

gpluess commented 1 year ago

I actually tried using Route::resource(Lang::uri('companies'), CompanyController::class) but that didn't do the trick. Will use explicit routes then...