web-dev-qa-db-ja.com

Symfony2:「GET / lucky / number」のルートが見つかりません

私は(初心者として)チュートリアルを開始し、すべてが正常に動作します:

http://symfony.com/doc/current/book/page_creation.html#creating-a-page-route-and-controller at stepページの作成:ルートとコントローラー

/var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.phpというファイルを作成しました

しかし http:// [Server-IP]:8000/app_dev.php/lucky/number を開くと、常に404が取得されます。

No route found for "GET /lucky/number"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

[2/2] NotFoundHttpException: No route found for "GET /lucky/number"   +
[1/2] ResourceNotFoundException:    +

routing.yml

app: 
    resource: "@AppBundle/Controller/" 
    type: annotation

コントローラ

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController 
{ 

    /**
     * @Route("/lucky/number") 
     */
    public function numberAction() 
    { 
        $number = Rand(0, 100);
        return new Response( '<html><body>Lucky number: '.$number.'</body></html>' ); 
    }
}

間違いはどこにあるのかわかりません...

エラー-キャッチされなかったPHP例外Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "/ var /の" GET/lucky/number "のルートが見つかりませんでしたwww/html/[Symfony-Folder] /app/cache/dev/classes.php line 2061

php app/console debug:route
 [router] Current routes
 Name                     Method Scheme Host Path
 _wdt                     ANY    ANY    ANY  /_wdt/{token}
 _profiler_home           ANY    ANY    ANY  /_profiler/
 _profiler_search         ANY    ANY    ANY  /_profiler/search
 _profiler_search_bar     ANY    ANY    ANY  /_profiler/search_bar
 _profiler_purge          ANY    ANY    ANY  /_profiler/purge
 _profiler_info           ANY    ANY    ANY  /_profiler/info/{about}
 _profiler_phpinfo        ANY    ANY    ANY  /_profiler/phpinfo
 _profiler_search_results ANY    ANY    ANY  /_profiler/{token}/search/results
 _profiler                ANY    ANY    ANY  /_profiler/{token}
 _profiler_router         ANY    ANY    ANY  /_profiler/{token}/router
 _profiler_exception      ANY    ANY    ANY  /_profiler/{token}/exception
 _profiler_exception_css  ANY    ANY    ANY  /_profiler/{token}/exception.css
 _configurator_home       ANY    ANY    ANY  /_configurator/
 _configurator_step       ANY    ANY    ANY  /_configurator/step/{index}
 _configurator_final      ANY    ANY    ANY  /_configurator/final
 _twig_error_test         ANY    ANY    ANY  /_error/{code}.{_format}
 homepage                 ANY    ANY    ANY  /
22
Atreides78

私はちょうど追加しました

<?php

ファイル「LuckyNumberController」に追加すると、動作します。

みんなありがとう

22
Atreides78

このURLを試してください:

http:// [Server-IP]:8000/app_dev.php/en/lucky/number

Symfony Bookにはバグがあります:彼らはデモアプリサポートi18nを忘れていました。

ルーティングの前に「/ en」パラメーターを追加するだけです。


この質問は閉じられていますが、私の答えがまだこの問題に直面している他の人を助けることを願っています。

6
pliski

キャッシュの問題である場合があります。/project/var/cache/devからdevフォルダーを削除してください。

authentictechが言うように、コマンドを試すこともできます:

php bin/console cache:clear

環境を指定する場合は、-env = prodプロパティを追加する必要があります。

4
Apuig

実際には、Symfony Controllerクラスを拡張しません。 class LuckyController extends Controllerである必要があります

// src/AppBundle/Controller/LuckyController.php 
namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response;

class LuckyController extends Controller {

     /** 
      * @Route("/lucky/number") 
      */ 
     public function numberAction() { 
         $number = Rand(0, 100); 
         return new Response('<html><body>Lucky number: '.$number.'</body></html>');
     }

}

編集:結局のところ、この質問の問題はコントローラーを拡張することではなかったので、私の答えを無視してください。

1
Dan Mironis

他の誰かがこの問題に遭遇した場合:私にとって問題は2つありました:

  1. 名前空間namespace AppBundle\Controller;を割り当てるのを忘れました
  2. テンプレートuse Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;のuseステートメントを追加しませんでした
0
Koen Cornelis

「GET/luck/number」のルートが見つからないもう1つの理由は、@Route注釈の前にタブがあるためです。コードを例とまったく同じようにプログラミングして、エラーですが、タブであることが判明しました。

以下の次のコードを参照してください。最初のコードは「ルートが見つかりません...」という例外を生成します。

/**
 *  @Route("/lucky/number")
 */

 /**
 * @Route("/lucky/number")
 */
0
Alvin Bunk

http:// localhost:8080 /SymfonyProject/web/app_dev.php/lucky/number

わたしにはできる。 「SymfonyProject」をプロジェクト名フォルダーで変更するか、プロジェクトがサーバーによって直接ポイントされている場合は削除します。また、動作するポート(localhost:8080)にも注意してください。私の場合は8080で、あなたの場合は8000かそれ以外の可能性があります。

0
Marco

基本クラスのコントローラーを拡張しても機能しませんでした。この問題を解決するには、web/app.phpで次の変更を行う必要がありました

$kernel = new AppKernel('prod', true);

また、URLに「en」を追加する必要がありました: http://scotchbox.demo/en/lucky/number

0
Krishna

既存のSymfonyプロジェクトにコントローラーをコピーして貼り付けたところ、すぐにルートが表示されました。したがって、コントローラーに問題はありません。

Routing.ymlも比較しましたが、同じです。

残っているのは、フォルダー構造を確認し、異なるSymfonyプロジェクトが混在していないことを確認することだけです。正しいファイルを編集しているが、別のパスからWebサーバーを起動している可能性があります。

慎重に確認するか、完全に異なるパスでプロジェクトを再構築してください。組み込みWebサーバーでテストしているので、プロジェクトを/ var/www/htmlに配置する必要はありません(実際には、しない方が良いです)。

0
Francesco Abeni

同じ問題を抱えていましたが、ここに示したものとはまったく異なる理由で...

どういうわけか、私のデモはデフォルトのロケールを定義していませんでした。これに対処できる多くの設定があるように見えますが、私はまだ正確な原因を知るためにSymfonyに十分に精通していません。それまでの私の解決策は、URLでロケールを単純に定義することです。例えば:

/app_dev.php/-en/lucky/number

0
Synexis