laravel框架扩展,原生注解生成路由
优点是直接生成路由文件,不在运行中解析路由,提升效率
[PHP] >= 8.0
[Laravel] >= 9.0
直接使用composer进行安装:
composer require --dev lovefc/laravel-route-notes
php artisan notes:route [-p dirname] [-f filename]
-p 要生成的控制器目录名称,默认为`app/Http/Controllers/`
-f 生成的路由文件地址,默认为`route/date("Y-m-d-His").php`
如果不指定控制器目录,默认会扫描app/Http/Controllers/下的所有控制器文件进行生成
首先要先在控制器类中标记开启注释功能,这样运行命令才会生成路由
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
#[annotate('true')]
class UserController extends Controller
{
#[get('/show')]
public function show()
{
return view('welcome');
}
}
上面是一个常规的控制器,必须在声明类的上面加上#[annotate('true')],这样才会生成注解。
可以在类的注解上声明全局的属性,比如:
#[annotate('true'),prefix('/user')]
这样下面方法注解就会自动带上前缀,当然你也可以在方法上改变这个前缀。
注解方法的属性跟路由使用基本上一样。
比如:
#[get('show'),prefix('/user'),middleware('myauth')]
上面声明的注解最终会生成以下的路由:
#Route::prefix("/user")->post("all",[userController::class,"show"])->middleware("myauth");
除此之外,也支持where正则验证:
#[get('show/{name}'),where(['name'=>'[a-z]+'])]
又或者这样:
#[get('show/{name}'),where('name','[a-z]+')]
另外你可以在类注解上面声明全局的where属性:
#[annotate('true'),prefix('/user'),where(['name'=>'[a-z]+'])]
重定向路由注解案例:
#[annotate('true')]
class MyController extends Controller
{
#[get('/index')]
public function index(Request $request){
return view('welcome');
}
#[redirect('/','/index')]
public function home(){
}
}
laravel-route-notes 扩展新增了分组路由支持,先看下面两个控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
#[annotate('true'),group(['prefix' => '/home','middleware'=>'auth'])]
class MyController extends Controller
{
#[get('/show')]
public function show()
{
echo 'show';
}
#[get('/show2')]
public function show2()
{
echo 'show2';
}
}
MyController 控制器的类注解上加上了一个 group(['prefix' => '/home','middleware'=>'auth'])
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
#[annotate('true')]
class My2Controller extends Controller
{
#[get('/')]
public function show()
{
return view('welcome');
}
#[get('/login'),name('login')]
public function login()
{
return view('welcome');
}
#[get('/show3'),group(['prefix' => '/home','middleware'=>'auth'])]
public function show2()
{
echo 'show3';
}
}
My2Controller控制器的方法show2上的注解上,同样也有个group(['prefix' => '/home','middleware'=>'auth'])
那么我们看一下最后生成的路由是什么样子的:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\My2Controller;
use App\Http\Controllers\MyController;
Route::get("/",[My2Controller::class,"show"]);
Route::get("/login",[My2Controller::class,"login"])->name("login");
Route::group(['prefix'=>'/home','middleware'=>'auth'],function(){
Route::get("/show3",[My2Controller::class,"show2"]);
Route::get("/show",[MyController::class,"show"]);
Route::get("/show2",[MyController::class,"show2"]);
});
大家可以看到,对于相同命名的路由都会归类到一起。
关于路由分组,其实限制又有不少,因为如果命名了group(['属性'=>'属性值']),那么最好不要再去单独声明相同的属性了。
另外,如果你类注解声明了`group(['prefix' => '/home']`,那么方法注解里,在声明`prefix('/home2')`,将不会起作用,相同的属性,在分组里面声明并不会生效。
类注解的都是会自动注册到方法注解里面,也可以在方法注解里面覆盖。
更多说明,请阅读composer包里的说明文档,赶快来试一试吧!
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我希望生成一个链接,该链接的前缀附加到命名路由本身。像这样显示路径“/old/recipes”:recipes_path(:prefix=>"old/")#thecorrectwayshouldshow"/old/recipes"我不想动routes.rb文件,而是修改带前缀的命名路由。这可能吗?您将如何正确地做到这一点?编辑:我正在使用Rails3。添加可选前缀的原因是我也想使用普通的recipes_path。所以我想同时使用“/recipes”和“/old/recipes”。 最佳答案 如果您不想触及路由文件,您将会遇到很多麻烦