chinleung / laravel-multilingual-routes

A package to handle multilingual routes in your Laravel application.
https://github.com/chinleung/laravel-multilingual-routes-demo
MIT License
394 stars 26 forks source link

How use multilingual for /{slug} #53

Closed Heqma closed 3 years ago

Heqma commented 3 years ago

ERROR: Missing required parameters for [Route: pl.page.show] [URI: {slug}] Missing required parameters for [Route: en.page.show] [URI: en/{slug}]

Route

Route::multilingual('{slug}', 'PagesController@show')->name('page.show');

page controller


      <?php

        namespace App\Http\Controllers;

        use Illuminate\Http\Request;
        use App\Realization;
        use App\Worker;
        use App\Page;

        class PagesController extends Controller
        {

    public function show($slug){

        $page = Page::findBySlug($slug);
        $workers = Worker::all();

        return view('pages.show', compact( 'page', 'workers'));

    }

}

Page model


    <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;
    use TCG\Voyager\Traits\Translatable;

    class Page extends Model
    {
    use Translatable;
    protected $translatable = ['title', 'body', 'excerpt', 'meta_description', 'meta_keywords', 'seo_title', 'slug'];

    public static function findBySlug($slug){

        return static::whereTranslation('slug', $slug)->where('status', 'ACTIVE')->firstOrFail();

    }

    }

Inside blade {{ localized_route('page.show') }} or {{ localized_route('page.show')->whereIn('id', [5]) }} is not work

chinleung commented 3 years ago

@Heqma

You need to pass a slug to your route:

localized_route('page.show', ['slug' => 'hello-world']);
Heqma commented 3 years ago

Ok, but doing this way, slug isn't translated.. and prefix isn't work.. this 2 translated slugs.. are working on 2 prefixes:

/o-nas ------ /en/o-nas /about-us ------ /en/about-us


primary lang/pl/routes.php 'o-nas' => 'o-nas',

secondary lang/en/routes.php translated & it should be with default with "en" prefix 'o-nas' => 'about-us',


Page Route Route::multilingual('{slug}', 'PagesController@show')->name('page.show');


Page Front

<a class="nav-link" href="{{ localized_route('page.show', ['slug' => 'o-nas']) }}">{{ __('links.O nas') }}</a>