0

私はSlimフレームワークに慣れていないので、名前付きルーティングにこの問題があります...最初のルートのコードは次のようになります

$app->get('/admin/home', function() use ($app){

    if(!isset($_SESSION)){
        $app->render('admin/login.php', [
            'message' => 'Restricted access!'
        ]);
    }else{
        session_start();
        $app->render('admin/home.php', [
            'username' => $_SESSION['username']
        ]);
    }

})->name('/admin/home');

しかし、その後、このルートをこのような別のルートから呼び出すと

$app->post('/admin/login', function() use ($app, $conn) {
    $app->urlFor('/admin/home');
})->name('/admin/login');

「名前付きルートはすでに次の名前で存在します:/ admin/login」という例外をスローします

わかりません...あるルートを別のルートから呼び出すことさえ可能ですか? 私がスリムのドキュメントで見たように、そうあるべきです...どこが間違っているのですか? ありがとう

4

1 に答える 1

0

ルートにスラッシュを付けないでください。

代わりにこれを試してください:

$app->get('/admin/home', function() use ($app){

  // details here

})->name('admin_home');

次のように呼び出します。

$app->post('/admin/login', function() use ($app, $conn) {
  echo $app->urlFor('admin_home'); // test it
})->name('admin_login');

その上、これらの 2 つの例では、現在、あなたが付けている名前にはほとんど利点がありません。あなたはこう言っています:「のルートを教えてください。/admin/homeそれは戻ってき/admin/homeます。 」それらが同一である場合は、文字列を使用しないでください。むしろ、名前付きルートは、URL が完全に明確ではないものを返すような場合に役立つ便利なメソッドです。

簡単な例:

name('user_login')にマッピングできますusers/login

しかし、name('admin_login')にマップされる可能性がありますadmin/login

明快さを追加するルート:

name('all_customers')->/customers

name('top_n_customers)->/customers/top/{count:[0-9]+}

name('recent_n_customers)->/customers/recent/{count:[0-9]+}

ファンシー

`name('filtered_customers)` -> `/customers/{field:[a-z]+}/{value}`

// example: 
/customers/country/spain       // customers in Spain
/customers/created/2016-01-01  // New customers this year

明らかに、最後の例では、有効なフィールドを確認し、サポートしていない場合は適切な応答を返す必要があります。

注: 構文は Slim Framework 3.0 用です。それに応じて、バージョン 2.0 に合わせて調整します。

于 2016-01-18T21:31:40.093 に答える