Необязательный маршрут маршрута Laravel - PullRequest
0 голосов
/ 11 октября 2019

Мой дополнительный маршрут выглядел так:

Route::group(['prefix' => 'blog'], function ({

    Route::get('/', [
        'uses' => 'BlogController@showBlog',
        'as' => 'show.blog'
    ]);

    Route::get('{author}/{y?}/{m?}/{d?}/{title?}', [
        'uses' => 'BlogController@showDetailBlog',
        'as' => 'detail.blog'
    ]);

});

и его контроллер выглядел следующим образом:

public function showDetailBlog($author, $year = null, $month = null, $date = null, $title = null)
{
    $user = User::where('username', $author)->first();

    if(!$year && !$month && !$date && !$title) {
        return view('pages.blog.author', compact('user'));

    } else {
        $blog = Blog::where('user_id', $user->id)->whereYear('created_at', $year)
            ->whereMonth('created_at', $month)->whereDay('created_at', $date)
            ->where('title_uri', $title)->first();
        $relates = Blog::where('category_id', $blog->category_id)->orderByDesc('id')->get();

        $tgl = Carbon::parse($blog->created_at);
        $uri = route('detail.blog', ['author' => $user->username, 'y' => $tgl->format('Y'),
            'm' => $tgl->format('m'), 'd' => $tgl->format('d'),
            'title' => $blog->title_uri]);

        return view('pages.blog.detail', compact('user', 'blog', 'relates', 'uri'));
    }
}

Когда я запрашиваю его с полным параметром, как:

/blog/author123/2019/10/10/lorem-ipsum-dolor-sit-amet

Он вернется в подробный вид блога. Но когда я запрашиваю его только с параметром автора, например:

/blog/author123

Он не вернется к представлению автора в блоге и всегда возвращает пустой массив.

Кто-нибудь знает, чтоЯ пропустил?

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Боже мой! Есть маршрут, который перезаписывает его, поэтому он возвращает пустой массив. Итак, мне просто нужно заменить этот маршрут get.title.blog:

Route::group(['prefix' => 'blog'], function () {

    // other blog route

    Route::get('{title}', [
       'uses' => 'BlogController@getTitleBlog',
       'as' => 'get.title.blog'
    ]);

    Route::get('{author}/{y?}/{m?}/{d?}/{title?}', [
       'uses' => 'BlogController@showDetailBlog',
       'as' => 'detail.blog'
    ]);

});

на этот:

Route::get('title/{title}', [
   'uses' => 'BlogController@getTitleBlog',
   'as' => 'get.title.blog'
]);

Как я глуп, лол. Но я не могу понять это дерьмо без вашей помощи, ребята, особенно @Raul tysm чувак: D

0 голосов
/ 11 октября 2019

просто попробуйте это

public function showDetailBlog($author, $year = null, $month = null, $date = null, $title = null)
{
    dd($author);
}

Убедитесь, что вы получите author123

, затем попробуйте добавить это:

Route::get('{author}', [
        'uses' => 'BlogController@showDetailBlog',
        'as' => 'detail.blog'
    ]);

В вашем маршруте, чтобы увидеть, есливаш контроллер все еще поражен этим маршрутом

С другой стороны, вы можете использовать привязку модели Laravel!

В вашем RouteServiceProvider

public function boot()
{
    parent::boot();

    Route::bind('author', function ($value) {
        return App\User::where('username', $value)->first() ?? abort(404);
    });
}
public function showDetailBlog(User $author, $year = null, $month = null, $date = null, $title = null)
{
    dd($author); // You will have your author instance !
}

0 голосов
/ 11 октября 2019
public function showDetailBlog($author, $year = null, $month = null, $date = null, $title = null)
    {
        $user = User::where('username', $author)->first();

        if (!$user) abort(404);

        if (is_null($year) && is_null($month) && is_null($date) && is_null($title)) {
            return view('pages.blog.author', compact('user'));
        }

        $blog = Blog::where('user_id', $user->id);

        if (!is_null($year)) {
            $blog = $blog->whereYear('created_at', $year);
        }
        if (!is_null($month)) {
            $blog = $blog->whereMonth('created_at', $month);
        }
        if (!is_null($date)) {
            $blog = $blog->whereDay('created_at', $date);
        }
        if (!is_null($title)) {
            $blog = $blog->where('title_uri', $title);
        }
        $blog = $blog->first();


        $relates = Blog::where('category_id', $blog->category_id)
            ->where('id', '!=', $blog->id)
            ->orderByDesc('id')->get();

        $tgl = Carbon::parse($blog->created_at);
        $uri = route('detail.blog', ['author' => $user->username, 'y' => $tgl->format('Y'),
            'm' => $tgl->format('m'), 'd' => $tgl->format('d'),
            'title' => $blog->title_uri]);

        return view('pages.blog.detail', compact('user', 'blog', 'relates', 'uri'));
    }
...