0

modulesLaravel アプリにフォルダーを作成しました。これまでのところ 2 つのモジュールがありますが、ここに集中してcoreいます。

フォルダ構造

次のように、Confide と Entrust を使用してユーザー機能を構築しています。

namespace App\Modules\Core;

use Zizaco\Confide\ConfideUser;
use Zizaco\Entrust\HasRole;

class User extends ConfideUser {
  use HasRole;
}

および権限:

namespace App\Modules\Core;

use Zizaco\Entrust\EntrustPermission;

class Permission extends EntrustPermission
{
}

および役割:

namespace App\Modules\Core;

use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{
}

私の Composer.json 自動読み込みは次のようになります。

"autoload": {
  "classmap": [
    "app/commands",
    "app/controllers",
    "app/models",
    "app/database/migrations",
    "app/database/seeds",
    "app/tests/TestCase.php",
    "app/modules"
  ],
  "psr-0": {
    "App\\Modules\\": "modules/"
  }
},

うまくいかなかったので、そこにpsr-0のものを入れました。composer を実行したときの出力 autoload ファイルには有望なエントリが含まれているようですが、まだ機能しません。

データベースが移行されたので、データベースのシード処理を実行しようとしています。私のシードスクリプトは次のとおりです。

use App\Modules\Core\User;
use App\Modules\Core\Role;
use App\Modules\Core\Permission;

class UserTablesSeeder extends Seeder {

  public function run()
  {
    DB::table('users')->insert(array(
      'email'  => 'xxx',
      'first_name'  => 'xxx',
      'password'  => 'xxxx',
      'active'  => 1
    ));

    $admin = new Role;
    $admin->name = 'Admin';
    $admin->save();

    $manageUsers = new Permission;
    $manageUsers->name = 'manage_standard_users';
    $manageUsers->display_name = 'Manage Users';
    $manageUsers->save();

    $admin->perms()->sync(array($manageUsers->id));

    $user = User::where('email','=','xxx')->first();
    $user->attachRole($admin);
  }
}

しかし、実行するphp artisan db:seedとエラーが発生します。

PHP Fatal error:  Class 'Permission' not found in /home/wedding/quincy/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 604
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'Permission' not found","file":"\/home\/wedding\/quincy\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Eloquent\/Model.php","line":604}}

すべての名前空間を取り除けば、すべて問題なく動作しますが、作成しようとしているモジュール性のために、名前空間を保持する必要があると思います。

を実行composer dump-autoloadし、installpsr-0 エントリを追加したときに実行しました。だから私は他に何をする必要があるのか​​ わかりません。私は作曲家に非常に慣れていないので、この時点で何が問題なのかわかりません。

前もって感謝します。

4

6 に答える 6

1

答えが見つかったかどうかはわかりません。

ここで、ロールとパーミッションの名前空間を持つクラス名を更新する必要があると思います。

ファイル: vendor/entrust/config/config.php:

(デフォルトはネームスペースのない「ロール」と「パーミッション」だけなので、実装を 1 つに移動しても機能しません)。

他に 2 つのオプションがあります。

  • app/config.php (Role => "Namespace") に完全な名前空間パーミッションとロール クラスのエイリアスを追加します。

  • 適切な名前のファイルでパッケージ構成設定をオーバーライドするメカニズムがあります。必要な 2 つのエントリ (Role および Permission 名前空間) だけをオーバーライドできます。

于 2014-12-16T20:25:40.540 に答える
0

標準のワークベンチ パッケージの代わりに独自のモジュールを使用する場合は、その方法を説明する次の記事を参照してください。

http://creolab.hr/2013/05/modules-in-laravel-4/

著者 ( Boris Strahija ) による要約:

Laravel 4 は composer パッケージに大きく基づいており、これは良いことですが、(私のような) 開発者はコードをモジュールに分割したい場合があります。これは、大規模なプロジェクトを構築する場合に特に便利です。これは、Laravel 3 ではバンドル システムを使用してかなり簡単に実行できましたが、Laravel 4 では、L4 には優れたワークベンチ機能があるため、多くの人がパッケージをビルドすることを推奨しています。これで問題ありませんが、アプリ固有のコントローラーとビューをモジュールに分けて、ワークベンチで実行する必要がないようにしたい場合があります。

要するに、あなたはしなければなりません

  • モジュールのコードをどこかに置きます (例: /app/modules/)
  • autoload/classmap の下の composer.json ファイルにディレクトリを含めます
  • 適切なサービスプロバイダーを作成します(Laravel 4はサービスプロバイダーを使用してパッケージを登録および起動します。モジュールでも使用できます)
  • サービス プロバイダーを登録します。プロバイダー配列の下の「app/config/app.php」のアプリ構成に追加します。

これで、モジュールが完全に機能するようになりました。モジュール固有のルートを追加し、コントローラー/ビュー/モデルをグループ化し、次のようにモジュール構成を取得できます。

Config::get('content::channels');

または、次のような翻訳されたフレーズを取得します。

Lang::get('shop::errors.no_items_in_cart');

最後に、モジュールをテストするために、いくつかのルートを作成できますが、コードをどのように使用するかはあなた次第です。

于 2013-08-16T11:54:05.600 に答える
0

localy の開発中は、Laravel のパッケージ (たとえば Workbench で作成されたもの) に依存する必要があります。
パッケージは、Laravel に機能を追加する主要な方法です。

Workbench パッケージとそのクラスは、Laravel によって自動的に処理されます。何も構成する必要はありません。

詳細はこちら: http://laravel.com/docs/packages

于 2013-08-15T06:22:26.607 に答える