如何在laravel 5中的视图内调用控制器函数

时间:2016-02-11 07:03:06

标签: php laravel-5

在laravel 4中我只使用了一个函数

_mapView.settings.myLocationButton = YES

从我的balde模板(视图页面)调用控制器功能。 现在我正在使用Laravel 5来做一个新项目,我尝试使用这种方法从我的刀片模板调用控制器功能。但是它不工作并显示一些错误。 是否有任何方法可以从Laravel 5中的视图页面调用控制器功能?

10 个答案:

答案 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);

请发布您遇到的实际错误!