27

随着您不断向 Routes.php 添加越来越多的路由,它会变得越来越大。你如何组织它们?

4

5 回答 5

24

我创建了一个目录 /application/routes/ 并在其中添加了文件。每个文件只是一组路由。然后在 routes.php 我添加了以下代码以将它们全部包含在内:

// Dynamically include all files in the routes directory
foreach (new DirectoryIterator(__DIR__.DS.'routes') as $file)
{
    if (!$file->isDot() && !$file->isDir() && $file->getFilename() != '.gitignore')
    {
        require_once __DIR__.DS.'routes'.DS.$file->getFilename();
    }
}
于 2013-05-15T20:50:44.747 回答
24

即使采用了其他答案中提到的所有最佳实践,即:使用资源控制器、路由组等。

您可以以旧方式简单地“包含”路由文件。正如 Chris G 在此评论中提到的那样。

您可以创建简单的目录结构并将路由文件包含在 route.php 文件中。

../myroutes
 --route-type-1.php
 --route-type-2.php 

在 route.php 文件中

include('myroutes/route-type-1.php');

它没有任何问题。这就是路由包含在包中的方式。

http://laravel.com/docs/packages#package-routing

于 2014-01-22T19:27:27.590 回答
14

我通常使用组路由(因为如果控制器相关,它们往往需要相同类型的过滤)来组织它们,或者如果您希望/可以拥有一个较小的路由文件,您可能想要注册您的控制器并进行额外的验证检查控制器本身内部的 URL 参数。

于 2013-02-16T01:02:20.423 回答
5

实际上溃败应该保持苗条。只需将您的代码移动到控制器并使用路由注册并重定向到它们。惯例是每个文件存储一个控制器,这样您的代码就会自动组织起来。

看看这个

//  application/controllers/sample.php
class Sample_Controller extends Base_Controller
{
    public function action_index()
    {
        echo "Wellcome to the root" //www.testapp.com/sample
    }

    public function action_edit()
    {
        echo "Some editing functions here." //www.testapp.com/sample/edit
    }

     public function action_whatsoever()
    {
        echo "Put here whatever you like." //www.testapp.com/sample/whatsoever
    }

}

控制器动作路由可以像这样注册:

//application/routs.php
Route::controller('admin::home');

非常直接和舒适。

更新:

您还可以使用此行为整个应用程序自动注册所有控制器:

Route::controller(Controller::detect());

或具有所有操作的控制器:

Route::controller(Controller::detect('yourcontroller'));
于 2013-02-22T14:47:53.743 回答
2

或者,您可以将路由存储在不同的文件中,然后使用包含获取这些文件:

Route::group(stuff,function(){
  include __DIR__.DS.'routes1.php';
  include __DIR__.DS.'routes2.php';
});

当代码太多时,这提供了一种很好且干净的方式来排序处理,您也可以提一下

Route::controller(Controller::detect());

然后相应地构造你的控制器:

class Account_Controller extends Base_Controller {
  public function action_login() {
      //Login
  }

  public function action_logout() {
      ...
  }

如果您必须将参数传递给某个函数:

  public function dosomething($input){
     ...
  }

您可以像这样访问这些功能:

  http://yourapp/account/login
  http://yourapp/account/logout

然后您可以通过将参数附加到 URL 来调用该函数,

  http://yourapp.account/dosomething/somedata

如果您需要保护某些方法,请在没有 action_ 的情况下附加它们,以便公众无法访问它们。

或者,您可以切换到 restful 方法,这基本上是一种根据您获得的查询类型来响应某些输入的方法,例如,当您收到对登录页面的“GET”请求时,这意味着用户需要查看登录屏幕,当您收到“POST”请求时,这通常意味着用户正在发布登录数据,因此您可以做出响应,这将帮助您减少函数数量以获取更多关于 restful 方法的信息,您可以阅读这篇精彩的文章作者:Ryan Tomayako 在http://tomayko.com/writings/rest-to-my-wife

要使用 restful 方法,您需要将 restful 设置为 true,然后在函数名称之前附加 action 关键字。

public $restful = true;
public function get_login() {
 return View::make('login');
 //This function is accessible using GET request to http://yourapp/login
}

public function post_login() {
   $data = Input::get();
   //do something using the Input data
   //This function is accessible using a POST request to http://yourapp/login
}

这样,您就可以消除对处理和验证用户凭据的其他途径的需要!

如果您不希望使用 restful 方法访问某些方法,那么只需不要在函数名称中包含 action 关键字 (get,post,...)。

将 restful 方法与智能路由相结合是保持代码清洁和安全的最有效方法。

于 2013-04-18T03:18:33.453 回答