如何在 Laravel 5.1 中从 Blade 调用控制器动作?
Posted
技术标签:
【中文标题】如何在 Laravel 5.1 中从 Blade 调用控制器动作?【英文标题】:How to call controller action from Blade in Laravel 5.1? 【发布时间】:2015-11-07 14:36:23 【问题描述】:我试图在 Laravel 5.1 的视图中调用控制器操作,但无法执行此操作。
这是我迄今为止尝试过的:
<?php echo BridesController::getPhotographer($data->sender_id);?>
但它给出了 Class 'BridesController' not found 错误。
【问题讨论】:
你想达到什么目的?肯定有比从视图执行控制器更好的方法。 【参考方案1】:要在属于当前操作的视图中呈现外部操作输出,您需要从当前操作调用外部操作,然后将其输出存储到变量并将其传递给当前视图。
从同一个控制器调用动作
如果您要渲染的动作在您使用的同一个控制器内,您可以调用:
$result = $this->action();
return view('my.view',['my_rendered_action'=>$result]);
然后,在你的视野中,只是:
!! $my_rendered_action !!
注意不要渲染来自用户使用此方法的任何内容,因为 !! !! 标签不会逃避危险的输入。如果您不需要在操作响应中包含 html,请始终使用 。
从另一个控制器调用动作
如果您需要在多个控制器之间共享一个方法,最简洁的方法是创建一个实现逻辑的 trait 或 Job,然后两个控制器将使用该 trait 或调度相同的作业。
更多信息请参考Shaddy's answer to this question。
希望对您有所帮助。 ;)
【讨论】:
我在 Laravel 5.4 中尝试了你的路由解决方案,但结果只是 url 路径而不是视图。例如。当我调用 action('page.listAll') 结果是“localhost.indalpe/page/listAll”。如何渲染动作返回的视图? 路由解决方案被标记为“旧答案”,因为它正在打印 URL。为了清楚起见,我现在编辑了文本以删除其旧版本。要渲染视图,您需要在渲染之前将其存储在变量中。请重新阅读答案(我认为现在更清楚了)。【参考方案2】:你可以这样做:
action('BridesController@getPhotographer',$data->sender_id);
当然,如果你使用刀片,你可以这样做
action('BridesController@getPhotographer',$data->sender_id)
你可以在这里查看 http://laravel.com/docs/5.1/controllers#basic-controllers
【讨论】:
【参考方案3】:如果您创建自己的外观,您可以这样做。
控制器:
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Facade;
class BridesController extends Facade
protected static function getFacadeAccessor()
//what you want
return 'getPhotographer';
public static function getPhotographer()
return "photographer";
//可能是服务提供者。
配置/app.php
'BridesController'=> App\Http\Controllers\BridesController::class,
然后你就可以在你的视图中使用了。
<div class="panel-body">
BridesController::getPhotographer()
</div>
我还没有测试过,但我认为应该可以。
【讨论】:
以上是关于如何在 Laravel 5.1 中从 Blade 调用控制器动作?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 和 Vue 在 Blade 中从组件 1 向组件 2 发送数据
在 Laravel 5.1 中使用 Blade 访问嵌套 URL