Ich habe gerade angefangen, das Laravel-Framework zu lernen, und ich habe ein Problem mit dem Routing.
Die einzige Route, die funktioniert, ist die Standardroute, die standardmäßig mit Laravel verbunden ist.
Ich verwende WAMP unter Windows und es verwendet PHP 5.4.3 und Apache 2.2.22. Außerdem habe ich mod_rewrite aktiviert und die 'index.php' aus der Konfigurationsdatei application.php zum Verlassen entfernt eine leere Zeichenfolge.
Ich habe einen neuen Controller mit dem Namen User : erstellt.
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Ich habe eine Ansichtsdatei in application/views/user/namens index.php mit einfachem HTML-Code erstellt und in routes.php Folgendes hinzugefügt:
Route::get('/', function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
Die erste Route funktioniert gut, wenn Sie das Stammverzeichnis (http://localhost/mysite/public
) in meinem Webbrowser aufrufen. Wenn ich jedoch mit http://localhost/mysite/public/user
auf die zweite Route gehe, wird der Fehler 404 Not Found angezeigt. Warum sollte das passieren?
Haben Sie versucht, dies zu Ihrer Routendatei hinzuzufügen Route::get('user', "[email protected]")
?
Der Text vor dem @
, user
, leitet in diesem Fall die Seite an die Benutzersteuerung und der Text nach dem @
, index
, leitet das Skript an die user
-Funktion public function get_index()
.
Wie Sie sehen, verwenden Sie $restful
. In diesem Fall könnten Sie Ihre Route
auf Route::any('user', '[email protected]')
setzen. Dies behandelt sowohl POST
als auch GET
, anstatt beide separat auszugeben.
Bei meiner Ubuntu LAMP-Installation habe ich dieses Problem mit den folgenden 2 Änderungen gelöst.
Sudo a2enmod rewrite
.AllowOverride All
Starten Sie anschließend den Apache-Server neu: service Apache2 restart
Klicken Sie mit WAMP auf das Wamp-Symbol -> Apache-> Apache-Module -> Scrollen und überprüfen Sie das Modul rewrite_
Beachten Sie, dass die Serveranwendung automatisch neu gestartet wird, sobald Sie "rewrite_module" aktivieren.
Haben Sie versucht zu überprüfen, ob
http://localhost/mysite/public/index.php/user
arbeitete? Wenn ja, stellen Sie sicher, dass alle Ordner Ihres Pfads keine Großbuchstaben haben. Ich hatte die gleiche Situation und es half, Buchstaben in Kleinbuchstaben umzuwandeln.
Ich habe das gleiche Problem mit EasyPHP bekommen. Ich habe festgestellt, dass ich AllowOverride All
in meinem <Directory>
-Block in httpd.conf
angeben musste. Andernfalls ignoriert Apache manchmal Ihren .htaccess
.
Meines sah so aus ...
<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>
Sie könnten versuchen, root/public/.htaccess
nach root/.htaccess
zu verschieben, und es sollte funktionieren
Routen
Verwenden Sie sie, um bestimmte Routen zu definieren, die nicht von Controllern verwaltet werden.
Controller
Verwenden Sie sie, wenn Sie die traditionelle MVC-Architektur verwenden möchten
Lösung für Ihr Problem
Sie registrieren Controller nicht als Routen, es sei denn, Sie möchten eine bestimmte "benannte" Route für eine Controlleraktion.
Anstatt eine Route für die Controller-Aktionen zu erstellen, registrieren Sie einfach Ihren Controller:
Route::controller('user');
Jetzt ist Ihr Controller registriert, Sie können zu http://localhost/mysite/public/user
navigieren und Ihr get_index
wird ausgeführt.
Sie können auch alle Controller auf einmal registrieren:
Route::controller(Controller::detect());
Vergessen Sie nicht die "RewriteBase
" in Ihrem public/.htaccess
:
Zum Beispiel :
Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
OK, also nachdem ich mich über einen Tag lang mit diesem Problem beschäftigt hatte ... Ich stand auf und tat, was ich gestern tun sollte, und entlarvte, was los war!
Was Laravel hier versucht, ist das Einfügen der Datei index.php
direkt vor dem als Route angegebenen Pfad. SO zum Beispiel, wenn Sie einen Route::get('/account/create', ...,
angegeben haben und Ihre App von beispielsweise localhost/laravel/authenticate/public/account/create
in Ihrem Browser ausführen, möchte laravel localhost/authenticate/public/index.php/account/create
ausführen, aber dazu muss Apache diese Anforderungen über /wamp/www/laravel/laravel/authentication/public
(Ihren Pfad) sehen kann etwas variieren, abhängig davon, wo Ihre Laravel-App tatsächlich installiert ist, aber die nachfolgende public
ist der Ort, an dem die Ersetzung erfolgen muss. Es muss eine 'RewriteRule' angewendet werden.
Zum Glück liefert laravel die richtige Rewrite-Regel in einer praktischen .htaccess
-Datei direkt im public
-Ordner Ihrer App. Das Problem ist, dass der Code in dieser '.htaccess'-Datei nicht so funktioniert, wie WAMP standardmäßig konfiguriert ist. Der Grund dafür, dass dieses SEEMS das von muvera am Anfang dieses Threads vorgeschlagene Problem ist - der rewrite_module-Code muss von Apache geladen werden, bevor der RewriteRule
-Zeiger funktioniert. Heck macht das Sinn.
Der Teil, der NICHT Sinn macht: einfach stopping
und restarting
Apache-Services werden nicht die notwendigen Änderungen vornehmen, damit WAMP mit Ihrer RewriteRule das Richtige tut.
Was funktioniert: Nehmen Sie die von muvera vorgeschlagenen Änderungen vor (siehe Anfang des Threads), um die richtigen Module zu laden. Setzen Sie anschließend Ihre gesamte Windows-Sitzung zurück, und entladen Sie Apache damit vollständig aus dem Speicher. Starten Sie WAMP und VOILA neu! Wenn der Fix funktioniert, wird die korrekte RewriteRule angewendet, Yada, Yada; Ich lebe glücklich bis heute.
Die gute Nachricht aus all dem: Ich weiß jetzt viel mehr über .htaccess
, RewriteRule
und httpd.conf
-Dateien. Es gibt ein gutes Argument (Leistung), um die Logik aus der public
.htaccess
-Datei Ihrer App zu verschieben und sie in einen Directory ...
-Abschnitt Ihrer httpd.conf in Ihrem Apache-Ordner 'bin' BTW zu legen (insbesondere, wenn Sie Zugriff auf diesen Ordner haben).
Wenn Sie Vagrant über Homestead verwenden, ist möglicherweise ein Fehler beim Laden des freigegebenen Ordners aufgetreten. Es sieht so aus, als würde Vagrant Ihre Dateien aus diesem Ordner entnehmen und die Dateien auslagern, die sich beim Booten tatsächlich auf dem Host-Computer befinden. Wenn also ein Fehler aufgetreten ist, versuchen Sie im Wesentlichen, auf Ihre Laravel-Installation zuzugreifen, wenn Sie sie erstellt haben Deshalb bekommen Sie nur "nach Hause" - das wurde während der Installation generiert.
Sie können dies leicht überprüfen, indem Sie in Ihre virtuelle Maschine wechseln und in der Datei routes/web.php nachsehen, ob es sich tatsächlich um Ihre Datei handelt. Ist dies nicht der Fall, beenden Sie out und vagrant halt
, vagrant up
und suchen Sie nach Fehlern beim Booten.
sie müssen Laravel 5 den Befehl verwenden
class User_Controller extends Controller {
public $restful = true;
public function get_index(){
return View('user.index');
}
}
und in routen.php
Route::get('/', function()
{
return view('home.index');
});
Route::get('user', function()
{
return view('user.index');
});
Laravel 5 Befehlsänderungen für Ansicht und Controller finden Sie in der Dokumentation, in der ich denselben Fehler hatte
Führen Sie einfach Ihr Terminal aus.
composer dump-autoload
Das Hauptproblem, dass die Route nicht funktioniert, ist das Modul mod_rewrite.so in macos. Linux ist in der Datei httpd.conf der Apache-Konfiguration nicht aktiviert.
Entfernen Sie das # von der obigen Zeile httpdf.conf. Dann wird es funktionieren. genießen!
Aktivieren Sie kurze php-Tags in Ihrer php.ini. WAMP hat sie normalerweise aus und Laravel braucht sie an.
Route::get('/', function()
{
return View::make('home.index');
});
Route::get('user', function()
{
return View::make('user.index');
});
oben ändern zu
Route::get('user', function()
{
return View::make('user.index');
});
Route::get('/', function()
{
return View::make('home.index');
});
Sie müssen am Ende in Ihren Routen '/' (home/default) verwenden
Ich denke, Sie haben die Standard-.htaccess-Datei im öffentlichen Laravel-Ordner gelöscht. Laden Sie die Datei hoch, um das Problem zu beheben.
die einfachen Befehle mit automatischem Laden der Abhängigkeiten
composer dump-autoload
und immer noch erhalten, dass einige wichtige Dateien fehlen, also sehen Sie hier den gesamten Vorgang
https://codingexpertise.blogspot.com/2018/11/laravel-new.html