Laravel 4 - 包装或"模块"?

Luc*_*ano 9 laravel laravel-4

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

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

/modules
       /backend
               /config
               /controllers
               /models
               /migrations
               /ecc..
       /frontend (and so on...)
Run Code Online (Sandbox Code Playgroud)

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

然后我发现这个链接启用类似模块的系统.那么,我应该遵循什么方法来保持laravel方式?

And*_*yco 13

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

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

|workbench
|-andreyco
|---cart
|-----public
|-----src
|-------Andreyco
|---------Cart
|-------config
|-------lang
|-------migrations
|-------views
|-----tests
|-----vendor
Run Code Online (Sandbox Code Playgroud)

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

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

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

问: 在哪里放置控制器和模型
A:只需在那里创建controllersmodels文件夹.
所以TestController它将位于workbench/andreyco/cart/src/controllers/TestController.php文件中.与模特一样.
目录树看起来像这样

|workbench
|-andreyco
|---cart
|-----public
|-----src
|-------Andreyco
|---------Cart
|-------config
|-------controlers
|-------lang
|-------migrations
|-------models
|-------views
|-----tests
|-----vendor
Run Code Online (Sandbox Code Playgroud)

我创造了routes.php,TestController.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}";
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用了名称空间,所以您应该这样做.
命名空间让您的生活更轻松.

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

// composer.json
"autoload": {
    "classmap": [
        ...
        "workbench/andreyco/cart/src/controllers",
        "workbench/andreyco/cart/src/models"
    ]
},
Run Code Online (Sandbox Code Playgroud)

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

问: 那么,我应该遵循什么方法来保持拉拉维尔的方式?
答:在我看来,你应该坚持使用包装.至少,我愿意.这就是Laravel的设计方式.

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

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

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

<h1>Testing view file.</h1>
{{ "Blade" }} syntax is parsed as well, no problem here.
Run Code Online (Sandbox Code Playgroud)

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

public function index()
    {
        return \View::make('cart::foldername.viewname');
    }
Run Code Online (Sandbox Code Playgroud)