2017-08-23 16 views
1

私のサイトの経路がi18nなので、言語の短いコードが含まれているURL構造を作成したいと思います。英語へ英語)Laravel/php関数の変数が間違って交互に表示される

私はmysite.com/articles/1/some-post-titleを達成しようとしています(デフォルト) が、その後mysite.com/fr/articles/1/some-post-title(この場合には、フランス語を適切な言語を選択してください)

私は2つのルートのロケール変数のないものとローカル変数のない他のを持っています。この二つの経路は、同じ機能を指している

ケース1私のコードではなく、(NULLであるとする)$locale変数のルートからのID値を割り当てロケール変数が存在しない

は次いで$title$idに割り当てられた変数は、コードが間違った結果を返します。すべての3つの変数が

Route::get('/{locale}/articles/{id}/{title}',function($locale=null,$id=null, $title=null){ 
    return $locale.'<br>'.$id.'<br>'.$title; 
}); 

もう存在しているので、右の注文が続いているケース2

Route::get('/articles/{id}/{title}', function($locale=null,$id=null, $title=null){ 
    return $locale.'<br>'.$id.'<br>'.$title; 
}); 

はI場合でも、ケース2内のコードが誤動作します

心配します変数の順序を変更し、おそらく最後にローカルに置く、どのようにPHPがこれを処理するかわからないが、私は注文shoulを考えていないこれらの変数には一意の名前があるので問題ありません。 私は可能な解決策として2つの異なる機能へのルートを指すことができますが、それは単にコードを繰り返すことになります。 ご協力いただきありがとうございます。

+0

私は状態ではなく、値ではないと思います。値として、しばしばうまく運ばない。 'foo.com // a'対' foo.com/0/a'です。確かに私は完全に質問を持っているが、それは基本的に何が起こっている? – ficuscr

+0

@ficuscrこの場合、関数のルートレベルではなくヌル値が割り当てられます。 –

+0

@ficuscr最初のルートはロケール変数が完全に無効なので、null値は「//」になりません –

答えて

2

経路の順序が重要です。だから、有効なアクションは、あなたが例えば、routes constraintsを追加することを検討可能性が一致しなければならないことを確認します

Route::get('/{locale}/articles/{id}/{title}',function($locale=null,$id=null, $title=null){ 
    return $locale.'<br>'.$id.'<br>'.$title; 
})->where('id','\d+'); 

必ずidは本当に数であることを確認します。

パラメータの順序について、Laravelはパラメータを表示された順序で一致させます。

Route::get('/articles/{id}/{title}', function($locale=null,$id=null, $title=null){ 

idパラメータが第二に行きます第一変数($locale)とtitleパラメータに移動します:あなたはあなたのルートでそれらの2つだけを持っている場合は、このスニペットのためにあなたは、あなたの閉鎖に3つのパラメータを持っているどんなに変数($id)。 urlには3番目のパラメータはありませんので、titleには何も割り当てられません。あなたのURLに2つのパラメータがある場合は、クロージャで同じ数のパラメータを使用して、期待どおりに動作させる必要があります。

+0

ルートの変数の順序はどういう意味なのでしょうか?指定した制約を追加しても、動作は改善されませんでした。これまでのご回答ありがとう –

+0

@F。ENoelNfebe私は余分な説明で私の答えを更新しました –

+0

ありがとうMarcin –

関連する問題