Joh*_*nny 21 controller global laravel
我有两个控制器文件homecontroller和backendcontroller.创建全局函数并从两个文件访问它的最佳方法是什么?
我在这里发现Arian Acosta的答案很有帮助,但我想知道是否有最简单的方法.我将不胜感激任何建议.
Max*_*rav 53
一种方法是创建一个类并使用它的实例,这样你不仅可以访问控制器,刀片或任何其他类中的类的对象.
在你的app文件夹中创建一个名为Helpers的文件夹,在其中创建一个文件名AppHelper或任何你选择的文件夹
<?php
namespace App\Helpers;
class AppHelper
{
public function bladeHelper($someValue)
{
return "increment $someValue";
}
public function startQueryLog()
{
\DB::enableQueryLog();
}
public function showQueries()
{
dd(\DB::getQueryLog());
}
public static function instance()
{
return new AppHelper();
}
}
Run Code Online (Sandbox Code Playgroud)
在控制器中,您可以调用各种功能
public function index()
{
//some code
//need to debug query
\App\Helpers\AppHelper::instance()->startQueryLog();
//some code that executes queries
\App\Helpers\AppHelper::instance()->showQueries();
}
Run Code Online (Sandbox Code Playgroud)
假设您在刀片文件中,以下是如何调用应用程序刀片帮助程序功能
some html code
{{ \App\Helpers\AppHelper::instance()->bladeHelper($value) }}
and then some html code
Run Code Online (Sandbox Code Playgroud)
您还可以通过在config\app.php中为AppHelper类创建别名来减少调用完整函数namespace \ App\Helpers的开销
'aliases' => [
....
'AppHelper' => App\Helpers\AppHelper::class
]
Run Code Online (Sandbox Code Playgroud)
在您的控制器或刀片文件中,您可以直接拨打电话
\AppHelper::instance()->functioName();
Run Code Online (Sandbox Code Playgroud)
Sap*_*aik 23
这很容易:
Helpers在app目录中创建一个新文件夹.php命名的文件.your_helper_function.phpHelpers内部your_helper_function.php:
function your_function($parameters){
//function logic
}
Run Code Online (Sandbox Code Playgroud)然后将此文件添加到Files您composer.json喜欢的密钥中:
"autoload": {
...
"files": [
"app/Helpers/your_helper_function.php"
]
...
}
Run Code Online (Sandbox Code Playgroud)最后在终端中运行此命令(在您的项目目录中),
composer dump-autoloadRun Code Online (Sandbox Code Playgroud)而已!现在您可以访问your_function()laravel项目的任何部分.
P. S:如果您希望多个功能全局可用,您可以将它们全部放在一个文件中,并将该文件添加到Files密钥composer.json
如果您仍有任何疑惑,请查看我的博客文章,了解如何执行此操作:
如何使用Composer在Laravel中添加Global功能?
Eli*_*rin 16
我在 Laravel 中使用全局函数已经有一段时间了,我想分享一下我是如何做到的。这是这篇文章中两个答案的混合: https: //stackoverflow.com/a/44021966/5543999和/sf/answers/3081702991/
这种方式将在 ServiceProvider 中加载文件并将其注册到您的 Laravel 应用程序中。
区别在哪里,范围,总是关于范围的。
Composer //Autload whitin composer.json method
|
|--->Laravel App //My method
|
|--->Controller //Trait method
|--->Blade //Trait method
|--->Listener //Trait method
|--->...
Run Code Online (Sandbox Code Playgroud)
这是解释我的观点的一种非常简单的方法,所有三种方法都将达到“全局函数”的目的。Traits 方法需要您声明use App\Helpers\Trait;or App\Helpers\Trait::function()。
作曲家和服务提供者几乎是一样的。对我来说,它们更好地回答了什么是全局函数的问题,因为它们不需要在您想要使用它们的每个地方声明它们。你只需使用它们function()。主要区别在于您对事物的偏好。
创建函数文件:App\Functions\GlobalFunctions.php
//App\Functions\GlobalFunctions.php
<?php
function first_function()
{
//function logic
}
function second_function()
{
//function logic
}
Run Code Online (Sandbox Code Playgroud)
创建服务提供者:
//Into the console
php artisan make:provider GlobalFunctionsServiceProvider
Run Code Online (Sandbox Code Playgroud)
打开新文件 App\Providers\GlobalFunctionsServiceProvider.php 并编辑注册方法
//App\Providers\GlobalFunctionsServiceProvider.php
public function register()
{
require_once base_path().'/app/Functions/GlobalFunctions.php';
}
Run Code Online (Sandbox Code Playgroud)
将您的提供程序注册到提供程序中的 App\Config\App.php 中
//App\Config\App.php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
...
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
App\Providers\GlobalFunctionsServiceProvider::class, //Add your service provider
Run Code Online (Sandbox Code Playgroud)
运行一些 artisan 的命令
//Into the console
php artisan clear-compiled
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)
使用新的全局函数
//Use your function anywhere within your Laravel app
first_function();
second_function();
Run Code Online (Sandbox Code Playgroud)
小智 9
在您的Controller.phpwhich 中extends BaseController,您可以创建一个函数,例如;
public function data($arr = false)
{
$data['foo'] = 'bar';
return array_merge($data,$arr);
}
Run Code Online (Sandbox Code Playgroud)
当您将数据发送到视图时,来自任何控制器;
public function example()
{
$data['smthg'] = 'smthgelse';
return view('myView',$this->data($data));
}
Run Code Online (Sandbox Code Playgroud)
可以从所有控制器和刀片访问主控制器中的数据。
小智 7
使用任何命名的公用文件.例如.Common.php并在其中编写所有常用功能.现在,如果要在控制器中访问此常用功能,只需使用"use"包含此Common.php文件即可.
use Common;
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问Common.php中包含的所有常用功能.同样在其他控制器中执行.
| 归档时间: |
|
| 查看次数: |
29730 次 |
| 最近记录: |