The*_*ebs 34 php controllers helpers blade laravel-5
如果我想currentUser()为一些oauth的东西做一个函数我正在做的我可以在视图或控制器中使用它(想想rails,你helper_method: current_user在应用程序控制器中做的事情).
我读到的所有内容都声明要创建一个帮助文件夹并在那里添加函数然后你可以这样做Helpers::functionName这是否是正确的方法呢?
什么是创建辅助功能的"laravel方式",可以在刀片模板和控制器中使用?
Kha*_*ukh 72
在你的app/Helpers目录中创建一个新文件,命名为AnythingHelper.php我的助手的一个例子是:
<?php
function getDomesticCities()
{
$result = \App\Package::where('type', '=', 'domestic')
->groupBy('from_city')
->get(['from_city']);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
通过以下命令为您的帮助程序生成服务提供程序
php artisan make:provider HelperServiceProvider
Run Code Online (Sandbox Code Playgroud)
在新生成的HelperServiceProvider.php的register函数中添加以下代码
require_once app_path('Helpers/AnythingHelper.php');
Run Code Online (Sandbox Code Playgroud)
现在在你的config/app.php加载这个服务提供商,你就完成了
'App\Providers\HelperServiceProvider',
Run Code Online (Sandbox Code Playgroud)
Ari*_*sta 43
创建全局函数文件的另一种有效方法是直接从composer自动加载它.composer的自动加载部分接受files自动加载的数组.
functions.php在任何你喜欢的地方创建一个文件,在这个例子中,我们将在里面创建它app/Helpers.
添加您的功能,但不添加类或命名空间.
<?php
function global_function_example($str)
{
return 'A Global Function with '. $str;
}
Run Code Online (Sandbox Code Playgroud)在composer.json该autoload部分内部添加以下行:
"files": ["app/Helpers/functions.php"]
Run Code Online (Sandbox Code Playgroud)对于Laravel 5:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": ["app/Helpers/functions.php"] // <-- Add this line
},
Run Code Online (Sandbox Code Playgroud)
composer dump-autoload恭喜!您现在可以访问global_function_example('hello world')应用程序的任何部分,包括Blade视图.
我希望这对某人有用!
bma*_*ovu 12
通常,您会发现自己需要一个在整个应用程序中全局访问的实用程序功能.借用laravel编写默认助手的方式,您可以使用自定义函数扩展该功能.
我更喜欢你一个文件,而不是一个类,因为我不想打扰命名空间,我希望它的函数可以在没有类前缀的情况下访问:greeting('Brian');而不是Helper::greeting('Brian');像Laravel那样对他们的帮助器.
文件: app/Support/helper.php
composer.json{
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Support/helpers.php"
],
"psr-4": {
"App\\": "app/"
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
<?php
if (!function_exists('greet')) {
/**
* Greeting a person
*
* @param string $person Name
* @return string
*/
function greet($person)
{
return 'Hello ' . $person;
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试访问其功能之前,请记住自动加载文件:
composer dump-autoload
$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ?Çö cli) by Justin Hileman
>>> greet('Brian');
=> "Hello Brian"
>>> exit
Exit: Goodbye.
Run Code Online (Sandbox Code Playgroud)
<p>{{ greet('Brian') }}</p>
Run Code Online (Sandbox Code Playgroud)
有时您会发现自己想要使用刀片指令而不是普通函数.在AppServiceProvider的引导方法中注册Blade指令:app/Providers/AppServiceProvider.php
public function boot()
{
// ...
Blade::directive('greet', function ($expression) {
return "<?php echo greet({$expression}); ?>";
});
}
Run Code Online (Sandbox Code Playgroud)
用法:
<p>@greet('Brian')</p>
注意:您可能需要清除缓存视图
php artisan view:clear
上面的答案很好,但有点复杂,因此存在这个答案。
实用程序.php
if (!function_exists('printHello')) {
function printHello()
{
return "Hello world!";
}
}
Run Code Online (Sandbox Code Playgroud)
在app/Providers/AppServiceProvider.php 中在register方法中添加以下内容
public function register()
{
require_once __DIR__ . "/path/to/utils.php"
}
Run Code Online (Sandbox Code Playgroud)
现在printHello函数可以在代码库中的任何位置访问,就像任何其他 Laravel 全局函数一样。
小智 5
另一种选择是,如果您不想一一注册所有辅助函数,并且想知道如何在每次创建新辅助函数时注册它们:
再次在app/Providers/AppServiceProvider.php中的register方法中添加以下内容
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename) {
require_once($filename);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29960 次 |
| 最近记录: |