Help us understand the problem. What is going on with this article?

laravelでmodule laravel-modules

More than 5 years have passed since last update.

比較的規模の大きなサービスなど、モジュールに分ると便利な場合があります。
マイクロフレームワークといわれるlaravelでやるには
ややコンセプトから外れるかもしれませんが出来るみたいなので試してみました。

creolab/laravel-modules
https://github.com/creolab/laravel-modules

インストール

composer.jsonrequire に追記

composer.json
{
  "require": {
    "creolab/laravel-modules": "dev-master"
  }
}
php composer.phar update

次に app/config/app.phpproviders に追記

app/config/app.php
'providers' => array(
    'Creolab\LaravelModules\ServiceProvider',
    'Way\Generators\GeneratorsServiceProvider'
)

composer.jsonautoloadclassmap に追記

composer.json
{
    "autoload": {
        "classmap": [
            "app/modules"
        ]
    }
}

次に今指定したディレクトリを作成します。

mkdir app/modules

次に下記コマンドを実行して設定ファイルを publish します。

php artisan config:publish creolab/laravel-modules

すると以下のファイルが生成されます。
この時modeを manifest にしておくことをオススメします。
autoだと都度スキャンをしてマニフェストファイルを作成し直すので、開発時は便利ですが
ファイルオーナーが変わってしまって表示ができなくなったり artisan routes の結果がおかしくなる罠があるので
常にマニフェストファイルから読み込むモードにしておくのが無難だと思います。
そのかわり構成変更時に手動で artisan modules:scan を忘れずに。

app/config/packages/creolab/laravel-modules/config.php
return array(

    'mode' => 'manifest',

);

これで準備完了です。
次にモジュールを作成してみます

モジュールの作成

php artisan modules:create blog

これでさっき作った app/modules の中にblogディレクトリが作成されて
その中にappと同じ構成のディレクトリとファイルが生成されます。

app/modules/blog
|-- assets
|-- config
|-- controllers
|-- lang
|-- migrations
|-- models
|-- module.json
|-- routes.php
`-- views

使い方

とりあえず routes.php に記述するだけですぐ使えます

app/modules/blog/routes.php
Route::get('blog', function() {
    return 'blogページ';
});

 generatorコマンドで楽をする

https://github.com/JeffreyWay/Laravel-Generator

もうすでに入れてる人も多いと思いますが
まだ入れていない場合はこれも自動でインストールされ連携することができます。

php artisan modules:generate blog controller MainController

これを実行すると、今回作成したblogモジュールのcontrollerディレクトリにファイルが作成されます

app/modules/contoller/MainController.php
<?php
class MainController extends BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        return View::make('mains.index');
    }

    //......

View::make も記述されていますがviewファイルは作成されないので自分でつくらなきゃいけません。
しかも 'mains.index' とかなっています。
このままだと app/views/mains/index.blade.php を参照してしまうので修正する必要があります。
内部でgeneratorコマンドを打っているだけなのでしょうがないのかもしれません。
このように::で区切ってモジュール名を指定する必要があります。

app/modules/contoller/MainController.php
View::make('blog::index');

次にビューファイルを作成します

php artisan modules:generate blog view index

すると以下のようなファイルが作成されます。

app/modules/blog/views/index.blade.php
index.blade
app/modules/blog/routes.php
Route::resource('blog','MainController')

これで無事 /blog にアクセスするとテンプレートが表示されます。

名前空間の設定

ただこのままだと他のモジュールとクラス名がかぶってしまう可能性があります。
さっきのコントローラクラスを名前空間の管理下に入れます

app/modules/contoller/MainController.php
<?php namespace App\Modules\Blog\Controllers;

use BaseController, View;

class MainController extends BaseController {

    //....
app/modules/blog/routes.php
Route::resource('blog','App\Modules\Blog\Controllers\MainController')

コントローラやモデルのクラスにnamespaceをつけると
コード量が増えるのでやっぱりlaravelには向いていない気がします。

仕様を変更する可能性があることを示唆しているので
しばらくはまだ様子見かもしれません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした