Laravelフレームワークの学習を始めたばかりで、ルーティングに問題があります。
動作している唯一のルートは、デフォルトでLaravelにアタッチされているデフォルトのホームルートです。
私はWindowsでWAMPを使用しており、PHP 5.4.3およびApache 2.2.22を使用しています。またmod_rewriteを有効にして、application.php構成ファイルから「index.php」を削除しました。空の文字列を残します。
serという新しいコントローラーを作成しました:
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Application/views/user /にindex.phpという基本的なHTMLコードを含むビューファイルを作成し、routes.phpに次を追加しました。
Route::get('/', function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
Webブラウザでルート(http://localhost/mysite/public
)にアクセスすると最初のルートは正常に機能しますが、http://localhost/mysite/public/user
で2番目のルートにアクセスしようとすると404 Not Foundエラーが発生します。なぜこれが起こるのでしょうか?
代わりにこれをあなたのroutesファイルに追加しようとしましたかRoute::get('user', "user@index")
?
この場合、@
、user
の前のテキストはページをユーザーコントローラーに誘導し、@
、index
の後のテキストは誘導しますuser
関数public function get_index()
へのスクリプト。
$restful
を使用していることがわかります。この場合、Route
をRoute::any('user', 'user@index')
に設定できます。これは、両方を別々に書き込むのではなく、POST
とGET
の両方を処理します。
Ubuntu LAMPのインストールで、次の2つの変更によりこの問題を解決しました。
Sudo a2enmod rewrite
。AllowOverride All
次に、Apacheサーバーを再起動します:service Apache2 restart
WAMPを使用して、wampアイコン-> Apache-> Apache modules-> scrollをクリックし、rewrite_moduleを確認します。LoadModule rewrite_moduleを再起動します。
「rewrite_module」を有効にすると、サーバーアプリケーションが自動的に再起動することに注意してください。
確認しようとしたことがありますか
http://localhost/mysite/public/index.php/user
仕事をしていました?その場合は、パスのすべてのフォルダーに大文字が含まれていないことを確認してください。私は同じ状況にあり、文字を小文字に変換するのに役立ちました。
EasyPHPを使用しても同じ問題が発生していました。 AllowOverride All
の<Directory>
ブロックでhttpd.conf
を指定する必要があることがわかりました。これがないと、Apacheは.htaccess
を時々無視します。
私のものはこうなりました...
<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>
root/public/.htaccess
をroot/.htaccess
に移動しようとすると、動作するはずです
ルート
これらを使用して、コントローラーによって管理されない特定のルートを定義します。
コントローラー
従来のMVCアーキテクチャを使用する場合に使用します
問題の解決策
コントローラーアクションに特定の「名前付き」ルートが必要な場合を除き、コントローラーをルートとして登録しません。
コントローラーアクションのルートを作成するのではなく、コントローラーを登録するだけです。
Route::controller('user');
これでコントローラーが登録され、http://localhost/mysite/public/user
に移動でき、get_index
が実行されます。
すべてのコントローラーを一度に登録することもできます。
Route::controller(Controller::detect());
public/.htaccess
の「RewriteBase
」を忘れないでください:
例えば :
Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
それでは、この問題を1日少しの間頭でたたいて...起きて昨日やるべきことをし、何が起こっているかをデバッグしました!
ここでLaravelがやろうとしているのは、ルートとして指定されたパスの直前にファイルindex.php
を挿入することです。 SOたとえば、Route::get('/account/create', ...,
を指定し、ブラウザでlocalhost/laravel/authenticate/public/account/create
からアプリを実行した場合、laravelはlocalhost/authenticate/public/index.php/account/create
を実行したい、しかしそれを行うには.... Apacheは/wamp/www/laravel/laravel/authentication/public
を介してリクエストを確認する必要があります(パスは、laravelアプリが実際にインストールされている場所によって異なりますが、末尾のpublic
は、置換を行う必要がある場所です)、「RewriteRule」を適用する必要があります。
ありがたいことに、laravelは、アプリのpublic
フォルダーにある便利な.htaccess
ファイルに正しい書き換えルールを提供します。問題は、その「.htaccess」ファイル内のコードは、WAMPがデフォルトで設定されている方法では機能しないことです。このSEEMSの理由は、このスレッドの先頭にあるmuveraが示唆する問題です。rewrite_moduleコードは、RewriteRule
が機能する前にApacheによってロードされる必要があります。これは理にかなっています。
意味をなさない部分:単純にstopping
およびrestarting
Apacheサービスは、WAMPがRewriteRuleで正しいことを行うために必要な変更を取得しません-私はこれを何度も試しました!
動作:muvera(スレッドの上部を参照)によって提案された変更を行い、正しいモジュールをロードします。次に、Windowsセッション全体をリセットして、Apacheをメモリから完全にダンプします。 WAMPを再起動(リロード)して、VOILA!修正が機能すると、正しいRewriteRuleが適用されます、yada、yada;私はずっと幸せに暮らしています。
これらのすべてからの良いニュース:私は.htaccess
、RewriteRule
、およびhttpd.conf
ファイルについて多くのことを知っています。アプリのpublic
.htaccess
ファイルからロジックを移動し、それをApache 'bin'フォルダーのhttpd.confのDirectory ...
セクションに配置するための適切な(パフォーマンス)引数があります。ところで(特にそのフォルダにアクセスできる場合)。
HomesteadでVagrantを使用している場合、共有フォルダーのマウント中にエラーが発生した可能性があります。 Vagrantはそのフォルダからファイルを取得し、起動時に実際にホストマシン上にあるファイルをスワップアウトするように見えるので、エラーがあった場合、あなたは本質的にいつからLaravelインストールにアクセスしようとしています最初に作成しました(これが、インストール時に生成された「ホーム」のみを取得する理由です)。
これを簡単に確認するには、vmにsshingし、routes/web.phpファイルをチェックして、実際に自分のファイルかどうかを確認します。そうでない場合は、終了してvagrant halt
、vagrant up
を起動し、起動時にエラーを探します。
Laravel 5コマンドを使用する必要があります
class User_Controller extends Controller {
public $restful = true;
public function get_index(){
return View('user.index');
}
}
とroutes.phpで
Route::get('/', function()
{
return view('home.index');
});
Route::get('user', function()
{
return view('user.index');
});
ビューとコントローラーのLaravel 5コマンドの変更は、以前に同じエラーが発生していたドキュメントを参照してください
端末で実行するだけです。
composer dump-autoload
ルートが機能しない主な問題は、macosにmod_rewrite.soモジュールがあり、Apache構成のhttpd.confファイルでlinuxが有効になっていないため、.htaccessが機能することです。行のコメントを外すことでこれを解決しました:
上記の行httpdf.confから#を削除します。その後、動作します。楽しい!
Php.iniで短いphpタグを有効にしてみてください。 WAMPは通常それらをオフにし、laravelはそれらをオンにする必要があります。
Route::get('/', function()
{
return View::make('home.index');
});
Route::get('user', function()
{
return View::make('user.index');
});
上記に変更
Route::get('user', function()
{
return View::make('user.index');
});
Route::get('/', function()
{
return View::make('home.index');
});
ルートの最後に「/」(ホーム/デフォルト)を使用する必要があります
laravelパブリックフォルダー内のデフォルトの.htaccessファイルを削除したと思います。問題を解決する必要があるファイルをアップロードします。
依存関係を自動的にロードする単純なコマンド
composer dump-autoload
まだいくつかの重要なファイルが欠落しているので、手順全体を見るにはこちらにアクセスしてください
https://codingexpertise.blogspot.com/2018/11/laravel-new.html