【问题标题】:How to call a controller function inside a view in laravel 5如何在 laravel 5 的视图中调用控制器函数
【发布时间】:2016-05-21 20:13:26
【问题描述】:

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

$varbl = App::make("ControllerName")->FunctionName($params);

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

【问题讨论】:

    标签: php laravel-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;
        
    }
    

    那么你就完成了。

    【讨论】:

      【解决方案2】:

      如果你有一个在多个地方使用的函数,你应该在 helpers 文件中定义它,为此在 app/Http/Helpers 文件夹中创建一个(可能是)并将其命名为 helpers.php,在您的 composer.json 的 autoload 块以下列方式:

      "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;
      

      【讨论】:

        【解决方案3】:

        在我的刀片视图 (Laravel) 中,我使用以下刀片语法(指定完整路径)来调用我的控制器操作。

        {{ App\Http\Controllers\mynestedpageController::index() }}

        【讨论】:

          【解决方案4】:

          要从视图页面访问控制器的方法,您需要在刀片页面中提供该控制器的完整路径。

          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;
           }
          

          【讨论】:

            【解决方案5】:

            您实际上可以在刀片模板中调用一个类、助手类或任何声明的类,但将其放在配置文件夹中 app.php 的别名数组中

                    'Helper' =>   App\Http\Helpers\Helper::class,
            

            使用 Helper 作为别名,您可以在刀片模板中引用它,示例如下:

                    {{Helper::formatDateToAgo ($notification->created_at)}}                                                
            

            【讨论】:

              【解决方案6】:

              我喜欢并赞成 Khan Shahrukh 方式,最好创建一个包含所有功能的帮助文件,然后将其添加到您的 composer.json 文件中:

              "autoload": {
                  "files": [
                      "app/Http/Helpers/helpers.php"
                  ]
              },
              

              你可以选择适合你的路径,然后dump-autoload composer让它包含新文件。

              为了可用性和干净的工作,之后您将能够在任何视图文件或项目部分上调用您的函数:控制器、模型。

              如果您决定使用 公共静态方法,请不要忘记在视图的最顶部添加这一行:

              use \App\Http\Controllers\ControllerName;
              

              【讨论】:

                【解决方案7】:

                不应该从视图中调用控制器方法。最好的选择是从返回视图对象的方法中调用该方法,该对象包含输出,然后您可以在视图中回显;

                    public function bar() {
                        $foo = $this->foo();
                        return view( 'my.view', compact( 'foo' ) );
                    }
                
                    protected method foo()
                    {
                        return 'foobar';
                    }
                

                将帮助文件添加到 compose.json 文件的第二个选项

                "autoload": {
                    "files": [
                        "app/helpers.php"
                    ]
                },
                

                转储您的自动加载,您可以从应用程序内的任何位置调用这些函数

                【讨论】:

                  【解决方案8】:

                  在 laravel 5 中,你可以这样做

                  在你看来:

                  <?php use App\Http\Controllers\ControllerName;
                  echo ControllerName::functionName(); ?>
                  

                  functionName 应该有 'static' 关键字,例如

                  控制器功能:

                  public static function functionName() {
                  return "Hello World!";
                  }
                  

                  【讨论】:

                    【解决方案9】:

                    实际上下面应该按照Laravel 5工作:
                    用法:App::make(ControllerName)-&gt;functionName($parameters);
                    示例:App:make("TestController")-&gt;getUserInfo('user_id' =&gt; 9);

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

                    【讨论】:

                      【解决方案10】:

                      在你的视野中试试这个:

                      {{ 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

                      【讨论】:

                      • 请接受未来访问者的答案。 Read this
                      • 将调用的函数设为静态,并在视图文件顶部包含&lt;?php use \App\Http\Controllers\ReminderController; ?&gt;
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-05-23
                      • 2014-10-30
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-11-24
                      相关资源
                      最近更新 更多