繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM