私は、複数のセグメントを持つことができるURLの動的ルーティングを手伝ってくれることを願っています。私はウェブ上でいくつかの検索を行ってきましたが、私が見つけたものは何も私の特定の状況で私を助けません。Laravel 5アプリケーションの動的ルーティング
少し背景...数年前、私はCodeIgniter上に構築されたカスタムクライアントのWebサイト用のCMSパッケージを開発しました。このCMSパッケージには、いくつかのモジュール(ページ、ブログ、カレンダー、お問い合わせなど)があります。 Pagesモジュールでは、ページのID(ルート、親、祖父母など)の完全なルートに関連する「カスタムルート」設定ファイルへのルートをキャッシュしていました。私はこれを行って、表示するページを見つけるためにデータベース検索を行う必要がないようにしました。
現在、私はLaravel(5.1)を使ってこのCMSパッケージを再構築しようとしています。ルーティングの状況を把握してから、ページモジュールを新しいバージョンのパッケージに移行する必要があります。
// routes.php
Route::get('{slug}', ['uses' => '[email protected]']);
// PageController.php
class PageController extends Controller
{
public function view($slug)
{
// do a query to get the page by the slug
// display the view
}
}
私は私のような何かを行うことができることを知って
...そして私は、ネストされたページを許可していませんでしたが、私がしなければ、これは動作します。そして、私は親に基づいてスラグの唯一性を強制する。だから私は、... ファーゴのスラグと
私はCodeIgniterのを使用して構築されたパッケージと同様に- 場所/ファーゴ
- スタッフ/ファーゴ
複数のページがあるかもしれません表示する正しいページを見つけるために余分なデータベース参照を避けることができるようにしたいと考えています。
私の初期の考えは、システムの古いバージョンと同じように動的なルートを持つ設定ファイルを作成することでした。ルートは特定の時刻(ページが作成されたとき、親が変更されたときに変更されたとき)にのみ変更されるので、それらを「キャッシュする」と効果的です。しかし、私はまだLaravelの新しさですから、これについての最良の方法は何か分かりません。
次のルートが動作することがわかりました。しかし、これを設定するにはこれが最善の方法ですか?
Route::get('about/foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [123]);
});
Route::get('foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [345]);
});
基本的に、私は、ページが作成されたとき(またはスラグまたは親が変更された場合)特定のページIDに特定のルートをバインドしたいと思います。
私は物事を過度に複雑化していますか?
これに関するお手伝いやご指摘をいただければ幸いです。
ありがとうございます!
「私は物事を過度に複雑にしていますか?」、IMO「はい」。また、これらのルートは静的に見えますが、 'ID'のプレースホルダーを許可しないとダイナミズムはありません。各経路はただ一つの特定の 'id'に束縛されています。 –
どのように設定する予定ですが、正しいページを見つけるために追加のデータベースクエリを実行する必要のない動的ルートを使用する方法はないと思います。私はブログのような他のモジュールのための動的ルートを使用しますが、通常のページでは、うまくいくとは思いません。 – Becky