Laravel routes ne fonctionne pas?

Je viens de commencer à apprendre le framework Laravel et j'ai un problème avec le routage.

La seule route qui fonctionne est la route d'accueil par défaut qui est attachée à Laravel hors de la boîte.

J'utilise WAMP sous Windows et il utilise PHP 5.4.3, et Apache 2.2.22, et j'ai aussi mod_rewrite activé ,et j'ai supprimé l'index.php' partir de l'application.fichier de configuration php pour laisser une chaîne vide.

J'ai créé un nouveau contrôleur appelé Utilisateur:

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

J'ai créé un fichier de vue dans application / views / user / appelé index.php avec du code html de base, et dans les routes.php j'ai ajouté ce qui suit:

Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

La première route à fonctionne bien lors de la visite de la racine (http://localhost/mysite/public) dans mon navigateur web, mais quand j'essaie d'aller à mon deuxième route avec http://localhost/mysite/public/user j'obtiens une erreur 404 not Found. Pourquoi en serait-il passe?

58
demandé sur Moe Far 2012-08-03 11:42:28

15 réponses

Avez-vous essayé d'ajouter ceci à votre fichier routes à la place Route::get('user', "user@index")?

Le morceau de texte avant le @, user dans ce cas, dirigera la page vers le contrôleur utilisateur et le morceau de texte après le @, index, va diriger le script vers la fonction user public function get_index().

Je vois que vous utilisez $restful, auquel cas vous pouvez définir votre Route sur Route::any('user', 'user@index'). Cela va gérer à la fois POST et GET, au lieu de les écrire tous les deux séparément.

21
répondu PapaSmurf 2012-08-03 15:44:25

Sur mon installation Ubuntu LAMP, j'ai résolu ce problème avec les modifications 2 suivantes.

  1. activez mod_rewrite sur le serveur apache: sudo a2enmod rewrite.
  2. Modifier /etc/apache2/apache2.conf , en changeant la directive "AllowOverride" pour le répertoire / var / www (qui est ma racine principale du document): AllowOverride All

Redémarrez ensuite le serveur Apache: service apache2 restart

70
répondu Andrew Vickers 2016-10-07 10:53:52

En utilisant WAMP, cliquez sur l'icône wamp - > apache - > modules apache - >faites défiler et vérifiez rewrite_module Le redémarrage d'un LoadModule rewrite_module

Remarque, l'application serveur redémarre automatiquement pour vous une fois que vous activez "rewrite_module"

62
répondu muvera 2013-02-04 07:05:34

Avez-vous essayé de vérifier si

http://localhost/mysite/public/index.php/user 

Travaillait? Si c'est le cas, assurez-vous que tous les dossiers de votre chemin n'ont pas de lettres majuscules. J'ai eu la même situation et la conversion des lettres en minuscules aidé.

25
répondu user1930566 2012-12-26 19:30:50

J'avais le même problème en utilisant EasyPHP. Trouvé que j'avais à préciser AllowOverride All dans mon <Directory> bloc httpd.conf. Sans cela, Apache ignore parfois votre .htaccess.

Le mien a fini par ressembler à ceci...

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>
6
répondu Simon East 2013-12-21 14:27:19

, Vous pouvez essayer de déplacer root/public/.htaccess à root/.htaccess et cela devrait fonctionner

6
répondu Wasim A. 2016-12-22 20:46:38

Itinéraires

Utilisez-les pour définir des routes spécifiques qui ne sont pas gérées par les contrôleurs.

Les Contrôleurs de

Utilisez-les Lorsque vous souhaitez utiliser l'architecture MVC traditionnelle

La Solution à votre problème

Vous n'enregistrez pas les contrôleurs en tant que routes sauf si vous voulez une route 'nommée' spécifique pour une action de contrôleur.

Plutôt que de créer une route pour les actions de vos contrôleurs, enregistrez simplement votre contrôleur:

Route::controller('user');

Maintenant votre le contrôleur est enregistré, vous pouvez naviguer vers http://localhost/mysite/public/user et votre get_index sera exécuté.

Vous pouvez également enregistrer tous les contrôleurs en une seule fois:

Route::controller(Controller::detect());
5
répondu David Barker 2012-08-03 14:57:27

N'oubliez pas le "RewriteBase" dans votre public/.htaccess :

Par exemple :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
3
répondu Mathieu Perino 2013-05-31 23:45:30

OK, donc après avoir dénigré ma tête sur ce problème pendant un peu plus d'une journée... Je me suis levé et j'ai fait ce que j'aurais dû faire hier, et J'ai débogué ce qui se passait!

Ce que Laravel essaie de faire ici, c'est d'insérer le fichier index.php juste en face du chemin donné en tant que Route. AINSI, par exemple, si vous avez spécifié un Route::get('/account/create', ..., et exécuter votre application de localhost/laravel/authenticate/public/account/create sur votre navigateur, puis laravel souhaite exécuter localhost/authenticate/public/index.php/account/create, mais à le faire.... Apache doit voir que les requêtes via /wamp/www/laravel/laravel/authentication/public (votre chemin peut variez quelque peu, selon l'endroit où votre application laravel est réellement installée, mais le public final est l'endroit où la substitution doit avoir lieu) doit avoir un 'RewriteRule' appliqué.

Heureusement, laravel fournit la règle de réécriture correcte dans un fichier .htaccess pratique dans le dossier public de votre application. Le problème est, le code dans ce '.le fichier htaccess ne fonctionnera pas avec la façon dont WAMP est configuré hors de la boîte. La raison de cela semble être le problème suggéré par muvera en haut de ce thread - le code rewrite_module doit être chargé par Apache avant que les éléments RewriteRule ne fonctionnent. Zut cela a du sens.

La partie qui N'a pas de sens: simplement stopping et restarting les services Apache ne récupéreront pas les modifications nécessaires pour que WAMP fasse la bonne chose avec votre RewriteRule - je sais, j'ai essayé cela plusieurs fois!

Qu'est-ce qui fonctionne: effectuez les modifications suggérées par muvera (voir en haut du thread) pour charger les modules corrects. Ensuite, réinitialisez toute votre session Windows, ainsi, le dumping Apache hors de la mémoire tout à fait. Redémarrez (rechargez) WAMP, et le tour est joué! le correctif fonctionne, la RewriteRule correcte est appliquée, yada, yada; je vis heureux pour toujours.

Les bonnes nouvelles de tout ça: j'en sais BEAUCOUP plus sur .htaccess, RewriteRule, et httpd.conf fichiers maintenant. Il existe un bon argument (performance) pour déplacer la logique de votre application public .htaccess fichier, et le mettre dans une section Directory ... de votre httpd.conf dans votre dossier Apache 'bin' BTW (surtout si vous avez accès à cela dossier).

2
répondu mdg 2014-03-15 19:15:21

Essayez d'activer les balises PHP courtes dans votre php.ini. WAMP les a généralement et laravel en a besoin.

0
répondu dajavax 2012-09-30 03:11:19
Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

Changer ci-dessus pour

Route::get('user', function()
{
return View::make('user.index');
});

Route::get('/', function()
{
return View::make('home.index');
});

Vous devez utiliser '/'(home/par défaut) à la fin de vos itinéraires

0
répondu athula 2013-12-27 10:56:28

Vous devez utiliser Laravel 5 la commande

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

Et dans les itinéraires.php

  Route::get('/', function()
  {
  return view('home.index');
  });

  Route::get('user', function()
  {
  return view('user.index');
  });

Laravel 5 changements de commande pour view et controller voir la documentation que j'avais la même erreur avant

0
répondu Rohan Kalra 2015-03-29 17:43:29

Exécutez simplement dans votre terminal.

 composer dump-autoload
0
répondu Bakhtawar GIll 2016-09-02 11:50:54

Le principal problème de la route ne fonctionne pas est qu'il y a mod_rewrite.so module sous macos, linux non activé dans httpd.fichier conf de configuration apache, donc peut .htaccess au travail. j'ai résolu cela en décommentant la ligne:

LoadModule rewrite_module libexec/apache2/mod_rewrite.donc

Supprimer le # de la ligne ci-dessus httpdf.conf. Ensuite, cela fonctionnera. Amusez-vous bien!

0
répondu Pramod yadav 2017-08-01 09:15:45

Je pense que vous avez supprimé default .fichier htaccess dans le dossier public laravel. télécharger le fichier, il devrait résoudre votre problème.

-1
répondu jewelhuq 2017-08-28 18:12:56