grohiro / laravel-action-submit
Laravel ActionSubmit 按钮
0.1.2
2014-07-06 13:46 UTC
This package is auto-updated.
Last update: 2024-08-29 03:31:27 UTC
README
可以生成用于执行任意动作的提交按钮。
<form action="user/list" method="post">
<!--UserController@search() -->
<input type="submit" value="Search" name="_action_search" />
<!--UserController@delete()-->
<input type="submit" value="Delete" name="_action_delete" />
</form>
在单个表单中创建多个提交按钮,通过按下的按钮选择要执行的动作。
路由
\Route::post('user/list', ['uses' => 'UserController@search', 'as' => 'user.search']);
\Route::post('user/delete', ['uses' => 'UserController@delete', 'as' => 'user.delete'])
视图 (Blade)
{{Form::open('user/list', ['method' => 'post'])}}
{{Form::actionSubmitRoute('user.search', 'Search'))}}
{{Form::actionSubmitRoute('user.delete', 'Delete'))}}
{{Form::close()}}
提交按钮
路由 Route
Form::actionSubmitRoute($routeName, $value, $patemeters, $attributes)
动作 Action
Form::actionSubmitAction($actionName, $value, $parameters, $attributes)
路径 Path
Form::actionSubmit($path, $value, $attributes)
用法
bootstrap/start.php
\Laravel\Extension\ActionSubmit\ActionSubmit::register();
require $app;
(又做了一点点。以下为闲话。)
实现方式
即使不将 Laravel 集成,也可以通过在提交按钮的 onclick 中替换 form.action 来实现相同的功能,但可能有些冗余。如果不喜欢使用 JavaScript,可以尝试使用它。
为了实现任意动作的调度而扩展了路由。Laravel 的路由是按照以下顺序解析动作的。
- 通过 \Route::add() 等方式将路由定义注册到 RouteCollections 中
- 从请求信息中获取满足以下所有条件的路由
- HTTP 方法匹配
- 协议(https?://)匹配
- 主机名匹配
- 路径匹配 (/controller/action)
- 找到匹配的路由后,使用 uses 指定的动作 (Controller@action) 执行
ActionSubmit 在路由获取条件中增加了与提交按钮 name 中嵌入的路由匹配的条件。
一些需要注意的点。
-
即使用
App::bind('router', 'MyRouter')
也不会使用MyRouter
类- 会使用
Illuminate\Routing\Router
- 似乎需要在
global.php
中在加载filters.php
之前使用App::bind()
App:bind()
可以在任何地方执行,但如果不在初始化前执行router
或request
等则没有意义- 即使在
global.php
中也存在问题,因此将其移动到bootstrap/start.php
。
- 会使用
-
App::bind('router', 'Laravel\Extension\ActionSubmit\Router')
不起作用- 将扩展的类注册到
router
后,所有 URL 都会返回 404 Not Found - 调试发现路由初始注册是成功的,但在调度时路由为空(artisan route 是正常的)
- 似乎每次调用
app('router')
都会生成一个Router
实例 - 通过将
App:bind('router', 'Hoge', true)
的第三个参数设置为true
来使其成为 Singleton 以解决问题
- 将扩展的类注册到
另请参阅
- Illuminate\Routing\Router
- Illuminate\Routing\Route
- Illuminate\Routing\RouteCollections