在laravel 4中我只使用了一个函数
_mapView.settings.myLocationButton = YES
从我的balde模板(视图页面)调用控制器功能。 现在我正在使用Laravel 5来做一个新项目,我尝试使用这种方法从我的刀片模板调用控制器功能。但是它不工作并显示一些错误。 是否有任何方法可以从Laravel 5中的视图页面调用控制器功能?
答案 0 :(得分:40)
请在您的视图中尝试此操作:
{{ ControllerName::Functionname($params); }}
OR
<?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
答案 1 :(得分:18)
如果你有一个在多个地方使用的函数,你应该在helpers文件中定义它,这样做在app / Http / Helpers文件夹中创建一个(可能是)并命名为helpers.php,在提到这个文件以下列方式自动运行你的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;
答案 2 :(得分:10)
在laravel 5中,你可以这样做
在您看来:
<?php use App\Http\Controllers\ControllerName;
echo ControllerName::functionName(); ?>
functionName应该有'static'关键字,例如
控制器功能:
public static function functionName() {
return "Hello World!";
}
答案 3 :(得分:2)
在刀片视图(Laravel)中,我使用以下刀片语法(指定完整路径)来调用控制器动作。
{{App \ Http \ Controllers \ mynestedpageController :: index()}}
答案 4 :(得分:1)
您实际上可以在刀片模板中调用一个类,助手类或任何已声明的类,但是将其放在config文件夹中的app.php的别名数组中
'Helper' => App\Http\Helpers\Helper::class,
使用Helper作为别名,您可以在刀片模板中引用它,如下例:
{{Helper::formatDateToAgo ($notification->created_at)}}
答案 5 :(得分:1)
在视图中调用如下函数:
@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;
}
那您就完成了。
答案 6 :(得分:0)
不应该从视图中调用控制器方法。最好的选择是从返回视图对象的方法调用方法,该方法包含您可以在视图中回显的输出;
public function bar() {
$foo = $this->foo();
return view( 'my.view', compact( 'foo' ) );
}
protected method foo()
{
return 'foobar';
}
将辅助文件添加到compose.json文件的第二个选项
"autoload": {
"files": [
"app/helpers.php"
]
},
转储您的自动加载,您可以从应用程序内的任何位置调用这些函数
答案 7 :(得分:0)
要从视图页面访问Controller的方法,您需要在刀片页面中提供该控制器的完整路径。
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;
}
答案 8 :(得分:0)
我喜欢并赞成 Khan Shahrukh 的方式,最好用你的所有函数创建一个帮助文件,然后将它添加到你的composer.json文件中:
var company = `${getCompanyName(creditCard)}: ${creditCard} (${cardValidator(creditCard) ? "valid" : "invalid"})`
您可以选择适合您的路径,然后使用dump-autoload composer使其包含新文件。
对于可用性和清洁工作,之后您将能够在任何视图文件或项目部件上调用您的函数:Controller,Model。
如果您决定使用公共静态方法请不要忘记在视图的最顶部添加此行:
"autoload": {
"files": [
"app/Http/Helpers/helpers.php"
]
},
答案 9 :(得分:-2)
实际上下面应该按照Laravel 5
工作:
用法:App::make(ControllerName)->functionName($parameters);
示例:App:make("TestController")->getUserInfo('user_id' => 9);
请发布您遇到的实际错误!