10

我开始使用 Laravel 4,这似乎是一个不错的选择,无论如何,在编写我的第一个项目之前,我想了解我通常的方法是否适用于 laravel。

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

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

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

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

4

1 回答 1

14

好吧,让我们开始...

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

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

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

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

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

Q: 控制器和模型放在哪里
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

我创建了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}";
    }
}

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

重要提示:创建这些文件后,您需要更新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');
    }
于 2013-08-08T22:34:40.350 回答