2016-06-22 27 views
5

Jestem nowy w Symfony, ale nie w PHP. Po prostu nie mogę zrozumieć, dlaczego nie mogę uzyskać trasy do strony domowej z niestandardowego pakietu, ale wygląda na to, że działa z wyjścia konsoli. Po uruchomieniu trasy w przeglądarce internetowej zawsze będzie ona ponownie zwracana z AppBundle, czyli domyślnej strony powitalnej Symfony, mimo że AppBundle został usunięty z funkcji registerBundles() w AppKernal.php. Mogę to potwierdzić, ponieważ jeśli usunąć katalog AppBundle z/src będę się następujący dziennik błędów:Symfony routing poprzez niestandardowy pakiet działa tylko w trybie konsoli

[2016-06-22 19:07:57] request.INFO: Matched route "homepage". {"route_parameters":{"_controller":"AppBundle\\Controller\\DefaultController::indexAction","_route":"homepage"},"request_uri":"http://bvd-v3.dev/"} [] 
[2016-06-22 19:07:57] security.INFO: Populated the TokenStorage with an anonymous Token. [] [] 
[2016-06-22 19:07:57] request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "Class "AppBundle\Controller\DefaultController" does not exist." at /Users/apple/projects/mentel/bvd-v3/var/cache/prod/classes.php line 2498 {"exception":"[object] (InvalidArgumentException(code: 0): Class \"AppBundle\\Controller\\DefaultController\" does not exist. at /Users/apple/projects/mentel/bvd-v3/var/cache/prod/classes.php:2498)"} [] 

Jednak jeśli zadzwonię php bin/console router:match /

Wyjście jest:

+--------------+---------------------------------------------------------+ 
| Property  | Value             | 
+--------------+---------------------------------------------------------+ 
| Route Name | homepage            | 
| Path   |/              | 
| Path Regex | #^/$#s             | 
| Host   | ANY              | 
| Host Regex |               | 
| Scheme  | ANY              | 
| Method  | ANY              | 
| Requirements | NO CUSTOM            | 
| Class  | Symfony\Component\Routing\Route       | 
| Defaults  | _controller: MentelBundle:Index:index     | 
| Options  | compiler_class: Symfony\Component\Routing\RouteCompiler | 
+--------------+---------------------------------------------------------+ 

Jeśli wzywam php bin/console debug:router

wyjście jest:

-------------------------- -------- -------- ------ ----------------------------------- 
    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_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 
    _twig_error_test   ANY  ANY  ANY /_error/{code}.{_format}   
    homepage     ANY  ANY  ANY /         

Zawartość routing.yml:

mentel: 
    resource: "@MentelBundle/Controller/" 
    type:  annotation 

zawartość routing_dev.yml:

_wdt: 
    resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" 
    prefix: /_wdt 

_profiler: 
    resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" 
    prefix: /_profiler 

_errors: 
    resource: "@TwigBundle/Resources/config/routing/errors.xml" 
    prefix: /_error 

_main: 
    resource: routing.yml 

zawartość registerBundles() w /app/AppKernal.php:

public function registerBundles() 
{ 
    $bundles = [ 
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
     new BVD\MentelBundle\MentelBundle(), 
    ]; 

    if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { 
     $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
} 

Treść kontrolera:

<?php 

namespace BVD\MentelBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

class IndexController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function indexAction() 
    { 
     die('?'); 
     return $this->render('@mentel/pages/home.html.twig', array(
      // ... 
     )); 
    } 

} 

Dzięki za przeczytanie mojego pytania, naprawdę doceniam każdą pomoc, którą możesz zaoferować.

+0

więc myślę, że nie ma i niezrozumiany. @Route ("/", name = "strona domowa") oznacza hostname.de/ jest trasą, jeśli chcesz hostname.de/ homepage @Route ("/ homepage", name = "homepage") powinieneś użyć – fucethebads

+0

I don ' t chcesz, aby '/ homepage' chciałem uzyskać trasę z domeny, np.' http: // example.com', która byłaby '/' ale to, co mówisz, nie ma znaczenia, ponieważ zmieniając trasę na '/ something_else 'po prostu dałoby Symfony 404. Ponieważ nie ma dla tego ścieżki AppBundle. – DrewT

+2

Czy próbowałeś wyczyścić pamięć podręczną ('bin/console cache: clear')? – Oldskool

Odpowiedz

0

Run:

php bin/console cache:clear --env=prod