web-dev-qa-db-ja.com

Laravel 4で名前空間を使用する

Laravelを初めて使用し、一般的にPHP名前空間を使用します。Fileという名前のモデルを作成するまで、問題に遭遇することはありませんでした。 Fileモデルクラスを使用できるように、名前空間を正しく移動しますか?

ファイルはapp/controllers/FilesController.phpおよびapp/models/File.phpです。 FilesController.phpに新しいFileを作成しようとしています。

44
user2030045

ネームスペースは、一度コツをつかめば非常に簡単です。

次の例をご覧ください。

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 記事

89
Josh Holloway

最初に、次を使用してクラスをロードします。

$ composer dump-autoload

それから

$file = new File;

// your stuff like:
$file->name = 'thename';
$file->active = true;

$file->save();

セクション:挿入、更新、削除Laravel 4 Eloquent's doc

5
Pierre Broucz

モデルを名前空間にするには、モデルクラスの最上部で、開始直後に

次に、コントローラーから呼び出すときに、新しいWhatever\Modelを呼び出します。

おそらく、最初にcomposerを指定してdump-autoloadを実行する必要があります。

2

名前空間は、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
0
Eric McWinNEr

それを見てください..うまくいけば、あなたのクエリをクリアします....

<?php

 namespace app\controllers;
 use yii\web\Controller;
 use app\models\users;
  class UserController extends Controller{
 public function actionIndex()
 {
echo "working on .....";
}
}
0
Muhammad Saeed