Laravelを初めて使用し、一般的にPHP名前空間を使用します。Fileという名前のモデルを作成するまで、問題に遭遇することはありませんでした。 Fileモデルクラスを使用できるように、名前空間を正しく移動しますか?
ファイルはapp/controllers/FilesController.php
およびapp/models/File.php
です。 FilesController.php
に新しいFile
を作成しようとしています。
ネームスペースは、一度コツをつかめば非常に簡単です。
次の例をご覧ください。
app/models/File.php
_namespace App\Models;
class File {
public function someMethodThatGetsFiles()
{
}
}
_
app/controllers/FileController.php
_namespace App\Controllers;
use App\Models\File;
class FileController {
public function someMethod()
{
$file = new File();
}
}
_
名前空間の宣言:
_namespace App\Controllers;
_
PHPの組み込みクラスにアクセスするためにクラスをネームスペースに配置したら、ルートネームスペースからそれらを呼び出す必要があります。例:$stdClass = new stdClass();
は$stdClass = new \stdClass();
になります(_\
_を参照)
「他の名前空間をインポート」:
_use App\Models\File;
_
これにより、名前空間プレフィックスなしでFile
クラスを使用できます。
または、次のように呼び出すこともできます。
_$file = new App\Models\File();
_
ただし、コードをスキャンせずにすべてのファイルの依存関係を確認できるため、use
ステートメントの先頭に配置することをお勧めします。
完了したら、_composer dump-autoload
_を実行してComposerの自動ロード機能を更新し、新しく追加されたクラスを考慮に入れる必要があります。
URLを介してFileControllerにアクセスする場合、ルートを定義し、次のように完全な名前空間を指定する必要があることに注意してください。
_Route::get('file', 'App\\Controllers\\FileController@someMethod');
_
これはすべてのGET/fileリクエストをコントローラーのsomeMethod()
に向けます
PHPドキュメント Namespaces とNettut'sは常に this 記事
最初に、次を使用してクラスをロードします。
$ composer dump-autoload
それから
$file = new File;
// your stuff like:
$file->name = 'thename';
$file->active = true;
$file->save();
モデルを名前空間にするには、モデルクラスの最上部で、開始直後に
次に、コントローラーから呼び出すときに、新しいWhatever\Modelを呼び出します。
おそらく、最初にcomposerを指定してdump-autoloadを実行する必要があります。
名前空間は、PHPクラスの先頭で、次のようにphpスクリプトタグを開いた直後に定義されます。
<?php
namespace MyNameSpace;
その後、他のクラスで名前空間付きクラスを使用する場合、次のように定義します。
new MyNameSpace\PhpClass;
または、ファイルの先頭(存在する場合は名前空間の後)に次のようにインポートします。
<?php
//namespace
use MyNameSpace\MyPHPClass;
//then later on the code you can instantiate the class normally
$myphpclass = new MyPHPClass();
Laravel名前空間はどこでも定義できますcomposerはそれらを自動ロードできます。アプリディレクトリ内で名前空間を定義することをお勧めします。アプリディレクトリにUtilsディレクトリを作成してユーティリティクラスを保持し、ユーティリティクラスを作成し、上記のようにネームスペースを定義します。
その後、コマンドを実行してcomposerにクラスを自動ロードします:
$ composer dump-autoload
それを見てください..うまくいけば、あなたのクエリをクリアします....
<?php
namespace app\controllers;
use yii\web\Controller;
use app\models\users;
class UserController extends Controller{
public function actionIndex()
{
echo "working on .....";
}
}