[英]How to call a controller function inside a view in laravel 5
在 laravel 4 中,我只使用了一个函数
$varbl = App::make("ControllerName")->FunctionName($params);
从我的 balde 模板(查看页面)调用控制器函数。 现在我正在使用 Laravel 5 来做一个新项目,我尝试用这个方法从我的刀片模板调用控制器函数。但它不工作并显示一些错误。 是否有任何方法可以从 Laravel 5 中的视图页面调用控制器函数?
在你看来试试这个:
{{ ControllerName::Functionname($params); }}
或者
<?php echo ControllerName::Functionname($params);?>
参考这个: http : //laravel.io/forum/03-06-2014-what-is-the-proper-way-to-call-controllers-from-the-view?page=1
如果您有一个在多个地方使用的函数,您应该在 helpers 文件中定义它,为此在 app/Http/Helpers 文件夹中创建一个(可能是)并将其命名为 helpers.php,在autoload
块中提及此文件您的 composer.json 以下列方式:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Http/Helpers/helpers.php"
]
},
运行 composer dump-autoload,然后你可以从任何地方调用这个函数,让它成为控制器视图或模型。
或者如果您不需要放入助手。 你可以简单地从它的控制器调用它。 只需将其static function
。 创建。
public static function funtion_name($args) {}
称呼。
\App\Http\Controllers\ControllerName::function_name($args)
如果你不喜欢很长的代码,你可以制作它
ControllerName::function_name($args)
但不要忘记从视图页面的顶部调用它。
use \App\Http\Controllers\ControllerName;
在laravel 5中,你可以这样做
在您看来:
<?php use App\Http\Controllers\ControllerName;
echo ControllerName::functionName(); ?>
functionName 应该有 'static' 关键字,例如
控制器功能:
public static function functionName() {
return "Hello World!";
}
你实际上可以在你的刀片模板中调用一个类、帮助类或任何声明的类,但把它放在 config 文件夹中 app.php 的别名数组中
'Helper' => App\Http\Helpers\Helper::class,
使用 Helper 作为别名,您可以在刀片模板中引用它,示例如下:
{{Helper::formatDateToAgo ($notification->created_at)}}
要从视图页面访问控制器的方法,您需要在刀片页面中提供该控制器的完整路径。
use App\Http\Controllers\AdminAfterAuth;
$admin_dtls = AdminAfterAuth::globAdmin();
这里 AdminAfterAuth 是控制器类名,globAdmin 是方法名。
现在在您的控制器中静态声明该方法。
public static function globAdmin(){
$admin_val = AdminLogin::where('id',session('admin_id'))->get();
return $admin_val;
}
我喜欢并喜欢Khan Shahrukh方式,最好创建一个包含所有功能的帮助文件,然后将其添加到您的 composer.json 文件中:
"autoload": {
"files": [
"app/Http/Helpers/helpers.php"
]
},
您可以选择适合您的路径,然后 dump-autoload composer 使其包含新文件。
为了可用性和干净的工作,之后您将能够在任何视图文件或项目部件上调用您的函数:控制器、模型。
如果您决定使用公共静态方法,请不要忘记在视图的最顶部添加这一行:
use \App\Http\Controllers\ControllerName;
在我的刀片视图 (Laravel) 中,我使用以下刀片语法(指定完整路径)来调用我的控制器操作。
{{ App\\Http\\Controllers\\mynestedpageController::index() }}
在视图中调用这样的函数:
@php
use App\Http\Controllers\ControllerName;
$var = ControllerName::FunctionName();
@endphp
但是如果控制器中的函数名是这样的:
public function FunctionName(){
return something;
}
然后会显示一个错误:
Non-static method App\Http\Controllers\ControllerName::FunctionName() should not be called statically(...)
所以要解决这个“非静态”问题,你必须像这样改变你的函数:
public static function FunctionName(){
return something;
}
然后你就完成了。
不应从视图中调用控制器方法。 最好的选择是从返回视图对象的方法中调用该方法,该方法包含您可以在视图中回显的输出;
public function bar() {
$foo = $this->foo();
return view( 'my.view', compact( 'foo' ) );
}
protected method foo()
{
return 'foobar';
}
将助手文件添加到 compose.json 文件的第二个选项
"autoload": {
"files": [
"app/helpers.php"
]
},
转储您的自动加载,您可以从应用程序内的任何位置调用这些函数
实际上下面应该按照Laravel 5
:
用法: App::make(ControllerName)->functionName($parameters);
示例: App:make("TestController")->getUserInfo('user_id' => 9);
请发布您遇到的实际错误!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.