Laravel 4 - 包装或“模块”?

时间:2013-08-08 17:24:16

标签: laravel laravel-4

我开始使用Laravel 4,它似乎是一个很好的选择,无论如何在编写我的第一个项目之前,我想了解我的常用方法是否可以使用laravel。

通常我将三元组保留在/ modules文件夹下的后端和前端,如下所示:

/modules
       /backend
               /config
               /controllers
               /models
               /migrations
               /ecc..
       /frontend (and so on...)

laravel我不确定如何管理这个。我正在尝试使用软件包,但是php artisan workbench me/mypackage --resources没有构建整个文件夹结构...在哪里放置控制器和模型,以及如何设置路由?

然后我发现这个link启用了类似模块的系统。那么,我应该遵循什么方法来保持拉拉维尔的方式呢?

1 个答案:

答案 0 :(得分:13)

好吧,让我们开始......

首先,我使用Artisan创建了Andreyco\Cart包 包及其结构

|workbench
|-andreyco
|---cart
|-----public
|-----src
|-------Andreyco
|---------Cart
|-------config
|-------lang
|-------migrations
|-------views
|-----tests
|-----vendor

在答案中,我将使用这个确切的包作为示例。

想象一下,该文件夹workbench/andreyco/cart/src是应用程序文件夹。如果你这样做,你应该知道大部分答案。 (实际上App也是包装)

问: 如何设置路线
A:创建文件 - > workbench/andreyco/cart/src/routes.php。这样做了。

问: 放置控制器和模型的位置
答:只需在那里创建controllersmodels文件夹 因此TestController位于workbench/andreyco/cart/src/controllers/TestController.php文件。与型号非常相似。
目录树看起来像这样

|workbench
|-andreyco
|---cart
|-----public
|-----src
|-------Andreyco
|---------Cart
|-------config
|-------controlers
|-------lang
|-------migrations
|-------models
|-------views
|-----tests
|-----vendor

我创建了routes.phpTestController.phpTestModel.php

// workbench/andreyco/cart/src/routes.php
<?php

Route::get('test', 'Andreyco\\Cart\\Controllers\\TestController@index');



// workbench/andreyco/cart/src/controllers/TestController.php
<?php namespace Andreyco\Cart\Controllers;

use Andreyco\Cart\Models\TestModel;

class TestController extends \BaseController
{
    public function index()
    {
        return TestModel::printCurrentLocation(__DIR__);
    }
}



// workbench/andreyco/cart/src/models/TestModel.php
<?php namespace Andreyco\Cart\Models;

class TestModel extends \Eloquent
{
    public static function printCurrentLocation($location)
    {
        return "Testing package controller, script is located at: {$location}";
    }
}

正如您所看到的,我使用了名称空间,所以你应该这样做 命名空间让您的生活更加轻松。

重要:创建这些文件后,您需要更新composer.json文件,以便可以自动加载类

// composer.json
"autoload": {
    "classmap": [
        ...
        "workbench/andreyco/cart/src/controllers",
        "workbench/andreyco/cart/src/models"
    ]
},

在此之后,使用composer dump-autoload -o命令转储更改。

问: 那么,我应该遵循什么方法来保持laravel方式呢?
A:在我看来,你应该坚持使用包裹。至少,我愿意。这就是Laravel的设计方式。

我希望这对你有所帮助,祝你好运!

修改
视图在这里不是问题。它们的工作方式与主应用程序包一样。

// workbench/cart/src/view/foldername/viewname.blade.php

<h1>Testing view file.</h1>
{{ "Blade" }} syntax is parsed as well, no problem here.

从包的控制器返回视图非常简单

public function index()
    {
        return \View::make('cart::foldername.viewname');
    }