随着您不断向Routes.php添加越来越多的路由,它会变得越来越大。你是如何组织它们的?
答案 0 :(得分: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();
}
}
答案 1 :(得分:21)
即使采用了其他答案中提到的所有最佳做法, 即:使用资源控制器,路由组等。
您可以简单地“包含”旧时尚方式的路径文件。正如Chris G在本评论中提到的那样。
您可以创建简单的目录结构,并在route.php文件中包含路由文件。
../myroutes
--route-type-1.php
--route-type-2.php
在route.php文件中
include('myroutes/route-type-1.php');
它没有错。这就是包中包含路由的方式。
答案 2 :(得分:13)
我通常使用Group routes(因为控制器往往需要相同类型的过滤,如果它们是相关的)来组织它们,或者如果你希望/可以有一个较小的路径文件,你可能想要{{3并在控制器本身内对URL的参数进行额外的验证检查。
答案 3 :(得分: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'));
答案 4 :(得分:2)
或者,您可以将路由存储在不同的文件中,然后使用include:
获取这些文件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”请求时,通常意味着用户正在发布登录数据,因此您可以回复哪些会帮助您减少功能数量,以获取有关您可以阅读的其他方法的更多信息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方法与智能路由相结合是保持代码清洁和安全的最有效方法。