laravel 自定义 类 添加别名
laravel custom classes add alias
所以我想为自定义 类 添加一个别名,以便能够在 blade:
中使用它们
<?php
namespace App\Classes;
class Requirement
{
public static function Test()
{
return "hello";
}
}
在 config/app.php
中,我添加了一个像这样的别名:
...
'Requirement' => App\Classes\Requirement::class
然后,我希望能够在 blade 模板中调用它,例如
{{ Requirement::Test() }}
但是别名不知何故不起作用。我也试了composer dump-autoload
,还是不行
顺便说一句:像这样添加自定义 类 是否是实现 site-specific 逻辑(如从数据库检索和处理数据)的可行方法,还是有更好的方法?
编辑 1
我在 app/Facades
中创建了 Requirement.php
,内容如下
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Requirement extends Facade{
protected static function getFacadeAccessor() { return 'Requirement'; }
}
在app/Providers
中添加了PageContentProvider.php
,内容如下
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class PageContentProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('Requirement', function($app){
return new \App\Classes\Requirement();
});
}
}
在 config/app.php
中别名
'Requirement'=>App\Facades\Requirement::class
以及提供商
App\Providers\PageContentProvider::class
但还是不行。
编辑 2
通过添加类似
的内容
exit();
或
echo "blabla";
在 register()
内,没有任何变化。这是否表明 PageContentProvider
甚至没有加载?
编辑 3
由于加载了标准 AppServiceProvider
,我删除了 config/app.php
中 AppServiceProvider
的相应条目... 它仍然有效! 不知何故,我的更改没有得到应用。有人对此有解决方案吗?
如果可行,试试这个:
在你的控制器中:
$whateveryour_variable = Requirement::Test();
return view('yourview',compact('whateveryour_variable'));
在您看来:
{{$whateveryour_variable}}
您可以在您的数据库中获取数据,然后将其存储在一个变量中,然后将其传递到您的视图中。
你试过用斜杠吗?
{{ \Requirement::Test() }}
编辑:语法
您要查找的是 Façades。
您创建了一个 Façade class,其中包含对服务容器中 class 绑定的引用,这就是您在 [=] 中的 aliases
数组中使用的内容18=]config/app.php 文件.
添加到您的作曲家文件:
"autoload": {
//...
"files" : ["app/classes/Requirement.php"]
},
然后添加到您在 config/app.php
中所写的别名
然后您就可以在模板中使用:
{{ Requirement::test() }}
问题根本不是代码:
在意识到 config/app.php
中的更改没有得到应用后,一个简单的
php artisan config:clear
从字面上解决了我在问题中提出的每个问题。
因为你提到你需要 Blade 中的 class:
您可以使用 blade 文件顶部的 blade @inject
函数代替设置别名。
@inject('your_class','App\Helpers\SomeNamespace\Yourclass')
然后在 blade 模板中:
{{$your_class->doSomething()}}
所以我想为自定义 类 添加一个别名,以便能够在 blade:
中使用它们<?php
namespace App\Classes;
class Requirement
{
public static function Test()
{
return "hello";
}
}
在 config/app.php
中,我添加了一个像这样的别名:
...
'Requirement' => App\Classes\Requirement::class
然后,我希望能够在 blade 模板中调用它,例如
{{ Requirement::Test() }}
但是别名不知何故不起作用。我也试了composer dump-autoload
,还是不行
顺便说一句:像这样添加自定义 类 是否是实现 site-specific 逻辑(如从数据库检索和处理数据)的可行方法,还是有更好的方法?
编辑 1
我在 app/Facades
中创建了 Requirement.php
,内容如下
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Requirement extends Facade{
protected static function getFacadeAccessor() { return 'Requirement'; }
}
在app/Providers
中添加了PageContentProvider.php
,内容如下
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class PageContentProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('Requirement', function($app){
return new \App\Classes\Requirement();
});
}
}
在 config/app.php
中别名
'Requirement'=>App\Facades\Requirement::class
以及提供商
App\Providers\PageContentProvider::class
但还是不行。
编辑 2
通过添加类似
的内容exit();
或
echo "blabla";
在 register()
内,没有任何变化。这是否表明 PageContentProvider
甚至没有加载?
编辑 3
由于加载了标准 AppServiceProvider
,我删除了 config/app.php
中 AppServiceProvider
的相应条目... 它仍然有效! 不知何故,我的更改没有得到应用。有人对此有解决方案吗?
如果可行,试试这个:
在你的控制器中:
$whateveryour_variable = Requirement::Test();
return view('yourview',compact('whateveryour_variable'));
在您看来:
{{$whateveryour_variable}}
您可以在您的数据库中获取数据,然后将其存储在一个变量中,然后将其传递到您的视图中。
你试过用斜杠吗?
{{ \Requirement::Test() }}
编辑:语法
您要查找的是 Façades。
您创建了一个 Façade class,其中包含对服务容器中 class 绑定的引用,这就是您在 [=] 中的 aliases
数组中使用的内容18=]config/app.php 文件.
添加到您的作曲家文件:
"autoload": {
//...
"files" : ["app/classes/Requirement.php"]
},
然后添加到您在 config/app.php
中所写的别名然后您就可以在模板中使用:
{{ Requirement::test() }}
问题根本不是代码:
在意识到 config/app.php
中的更改没有得到应用后,一个简单的
php artisan config:clear
从字面上解决了我在问题中提出的每个问题。
因为你提到你需要 Blade 中的 class:
您可以使用 blade 文件顶部的 blade @inject
函数代替设置别名。
@inject('your_class','App\Helpers\SomeNamespace\Yourclass')
然后在 blade 模板中:
{{$your_class->doSomething()}}