标签: laravel-facade

如何为独立的Illuminate IoC Container创建Illuminate/Support/Facade/App facade

在我的独立(没有Laravel)项目中,我想使用Illuminate IoC容器.此外,我想App通过illuminate/support组件提供的外观访问应用程序容器.我安装了两个组件(v5.0.28).这是我的(简化)代码:

function setup_App(){
    $container = new Illuminate\Container\Container();
    Illuminate\Support\Facades\Facade::setFacadeApplication($container);
    class_alias('Illuminate\Support\Facades\App', 'App');
}

setup_App();

App::bind('w', 'Widget');
$widget = App::make('w');
Run Code Online (Sandbox Code Playgroud)

不幸的是,尝试绑定某些内容会导致:

Fatal error: Call to undefined method Illuminate\Support\Facades\App::bind() in ...\illuminate\support\Facades\Facade.php on line 213
Run Code Online (Sandbox Code Playgroud)

这是该行的代码

$instance = static::getFacadeRoot();
...
return $instance->$method($args[0], $args[1]); // <--- line 213
Run Code Online (Sandbox Code Playgroud)

哪里$instance是一个实例Illuminate\Support\Facades\App,$method == 'bind',$args[0] == 'w'$args[1] == 'Widget'.问题是它$instance不是一个实例,Illuminate\Container\Container并且类Illuminate\Support\Facades\App没有任何支持在其静态属性上调用任意函数$app.

为了使它工作,我将以下功能添加到Illuminate\Support\Facades\App:

public function __call( $method , …
Run Code Online (Sandbox Code Playgroud)

php ioc-container laravel illuminate-container laravel-facade

6
推荐指数
1
解决办法
970
查看次数

Laravel - Facades与辅助方法的表现

我想知道在laravel 5.1中使用Facades和helper方法之间是否存在性能差异.

我首先要删除,use View;或者View::make()尽可能地删除,认为这view()会更简单,也可能更快.但我不知道.

Redirect::to()- > redirect(),Redirect::back()- > back()等相同..

是否存在差异或无关紧要?

php performance laravel-5 laravel-facade

6
推荐指数
1
解决办法
1904
查看次数

尝试使用自定义外观导致Laravel中Application :: create()上的"调用未定义方法"?

我正在尝试为搜索功能创建自己的自定义外观,但我遇到了一些困难:

type: Symfony\Component\Debug\Exception\FatalErrorException
message: Call to undefined method Illuminate\Foundation\Application::create()
file: H:\myproj\vendor\laravel\framework\src\Illuminate\Container\Container.php
line: 165
Run Code Online (Sandbox Code Playgroud)

此错误是由我的代码命中引起的:

Search::indexObject(); 
Run Code Online (Sandbox Code Playgroud)

我的Search门面设置如下:

SearchServiceProvider

<?php
namespace MyProj\Search;

use Illuminate\Support\ServiceProvider;

class SearchServiceProvider extends ServiceProvider {

    public function register() {
        $this->app->bind('search', 'MyProj\Search\Search');
    }

}
Run Code Online (Sandbox Code Playgroud)

搜索门面

<?php
namespace MyProj\Facades;

use Illuminate\Support\Facades\Facade;

class Search extends Facade {
    public static function getFacadeAccessor() {
        return 'search';
    }
}
Run Code Online (Sandbox Code Playgroud)

搜索课程

<?php
namespace MyProj\Search;

use Elasticsearch\Client;
use Credential;

class Search {
    private $elasticSearchClient;

    public function __construct() {
        $this->elasticSearchClient = new Client(array(
            'hosts' => …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-facade

6
推荐指数
1
解决办法
1963
查看次数

如何更新用户个人资料?Laravel-5

只想首先说我不知道​​我在做什么......我有一个看起来像这样的user_info表

    Schema::create('user_info', function(Blueprint $table){
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
        $table->string('address');
        $table->string('city');
        $table->string('state');
        $table->string('zip');
        $table->text('description');
        $table->text('experience');
        $table->timestamps();
    });   
Run Code Online (Sandbox Code Playgroud)

我在创建现在看起来像这样的更新控制器时遇到了问题.

public function update(Request $request)
{

  $user = $request->user();
  $data['description'] = $request->input('description');
  $data['experience']=$request->input('experience');

  $user->user_info -> $data->save();
}
Run Code Online (Sandbox Code Playgroud)

再一次......不知道我在做什么......

这是我的形式:

    <div class='col-md-10 well form-well'>
        {!! Form::open(['method' => 'PATCH', 'action'=> ['UserController@update', Request::user()->id]]) !!}
        <div class='row'>
                <div class='form-group'>
                    <div class='col-md-2'>
                        {!! Form::label('description', 'About You')!!}
                    </div>
                    <div class='col-md-7'>
                        {!! Form::textarea('description', null, ['class'=>'form-control', 'rows'=>'3'])!!}
                    </div>
                </div>
        </div>
        <div class='row'>
                <div class='form-group'>
                    <div class='col-md-2'>
                        {!! Form::label('experience', 'Experience and Skills')!!}
                    </div>
                    <div …
Run Code Online (Sandbox Code Playgroud)

php web laravel laravel-5 laravel-facade

6
推荐指数
1
解决办法
8593
查看次数

Laravel:外观和别名的区别

再会!

我读得越多,我就越对此感到困惑。Facade 和 Aliases 有什么区别?

我有这个类:

/app/libraries/Project/Data.php

namespace PJ;

class Data {

    // It is much like a data container, with static methods and properties for saving info

}
Run Code Online (Sandbox Code Playgroud)

以及相应的外观,因此我可以仅使用PJD::进行访问。

根据一些网页:

... Laravel Facades 是代理。它们环绕并调用代码的底层真实实现上的函数。此外,在 Laravel 应用程序的上下文中,通过将它们分配给别名来访问这些 Facade。这种依赖注入容器的使用允许你通过简单地调用 File 来引用像 Illuminate\Support\Facades\Filesystem 这样的东西。( http://ryantablada.com/post/proxies-service-locators-alias-facades-and-war )

但是,我还发现并成功测试了添加以下内容:

__app/config/app.php__

'aliases' => array(
    //....,
    'PJD'             => 'PJ\Data',
),
Run Code Online (Sandbox Code Playgroud)

我也可以用同样的方式访问我的班级。

那么,有什么区别呢?

谢谢

编辑#01

我在/app/libraries/Project/Data.php 中创建了一个名为 Data 的类

namespace PJ;

class Data {
    // It is much like a data container, with …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-4 laravel-facade

5
推荐指数
1
解决办法
3246
查看次数

laravel 5:扩展外观

我需要根据客户端处理不同类型的数据库。

我创建了一个名为MyDBFacade的Facade ,可以在其中调用自己的函数。

例如:

MyDBFacade::createDBUser("MyUser"); // will create a DB user whatever I'm using Postgres or SQL Server
Run Code Online (Sandbox Code Playgroud)

是否有可能扩展Facade DB ::框架,我可以添加自己的函数,然后调用DB::createUser("MyUser")

任何线索或想法将不胜感激。

在此先感谢您,祝您愉快。

php laravel laravel-5 laravel-facade

5
推荐指数
1
解决办法
1902
查看次数

Laravel在运行时更改文件系统磁盘路径

我知道使用filesystems.php创建磁盘,目前正在使用它,配置了约20个磁盘。

我对此有一个新问题,我目前正在尝试为每个磁盘加上一个字符串前缀。问题是,在php artisan config:cache运行时会保存路径,但是我需要在运行时更改它们,例如n,对于User,Sergio它需要附加Sergio/到以下磁盘上:

//filesystems.php
'random' => [
   'driver' => 'local',
   'root' => storage_path('app/random'),
],
Run Code Online (Sandbox Code Playgroud)

然后

Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
//outputs /var/www/html/project/storage/app/random
Run Code Online (Sandbox Code Playgroud)

并且目标是在中间件中设置配置,例如,我目前正在像这样设置帐篷数据库

//Middleware
Config::set('database.connections.tenant.database', "Sergio");
DB::reconnect('tenant');
Run Code Online (Sandbox Code Playgroud)

我目前可以正确设置路径

Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
Run Code Online (Sandbox Code Playgroud)

但是我担心,因为如果在该行之前我尝试到达该路径,那么存储将初始路径保存在内存中,而不是在更改后重新获取它。

例如。无需任何中间件就能做到这一点。

$fullPath1 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();

Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));

$fullPath2 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
Run Code Online (Sandbox Code Playgroud)

打算发生的事情是$fullPath1将输出初始路径,/var/www/html/project/storage/app/random然后$fullPath2将其输出/var/www/html/project/storage/app/Sergio/random

有什么方法可以让Storage知道我已经更改了磁盘的本地路径?

laravel laravel-facade laravel-storage

5
推荐指数
1
解决办法
716
查看次数

在 Laravel 7 中找不到“表单”类

我正在从 Laravel 5 升级到 Laravel 7。

在此处输入图片说明

Form::model在我的项目中使用了很多。

未找到“表格”类

我尝试安装

"laravelcollective/html": "~5.0"

我不断得到

Problem 1
    - Conclusion: remove laravel/framework v7.3.0
    - Conclusion: don't install laravel/framework v7.3.0
    - Conclusion: don't install laravel/framework v7.2.2
    - Conclusion: don't install laravel/framework v7.2.1
    - Conclusion: don't install laravel/framework v7.2.0
    - Conclusion: don't install laravel/framework v7.1.3
    - Conclusion: don't install laravel/framework v7.1.2
    - Conclusion: don't install laravel/framework v7.1.1
    - Conclusion: don't install laravel/framework v7.1.0
    - Conclusion: don't install laravel/framework v7.0.8
    - Conclusion: don't install laravel/framework …
Run Code Online (Sandbox Code Playgroud)

php laravel composer-php laravel-facade laravel-7

5
推荐指数
2
解决办法
1万
查看次数

laravel-ide-helper 的问题

我正在浏览 Laravel 5 Fundamentals Laracasts 视频集,但在我的 IDE (Phpstorm 8) 中使用 Facades 时遇到了一些困难。我有一个使用 Eloquent 外观的模型use Illuminate\Database\Eloquent\Model;

我需要 laravel-ide-helper composer require barryvdh/laravel-ide-helper,将服务提供者添加到 providers 数组'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',,重新生成文档并重新启动我的 IDE,但没有成功。

我的控制器中有一个模型声明,$article = Article::findOrFail($id);但该findOrFail方法被突出显示并标记为 Method 'findOrFail' not found in class App\Article。

我是 Laravel 和 Facades 概念的新手,但我迷失了并且无法为我的问题找到现有的答案。

php phpstorm laravel laravel-facade

4
推荐指数
1
解决办法
2875
查看次数

PHPUnit Laravel Hash不可用

我在Laravel中进行了单元测试,用于测试看起来像这样的API调用,但是在运行时遇到以下运行时错误:

RuntimeException: A facade root has not been set.
Run Code Online (Sandbox Code Playgroud)

我在setup方法中创建了一个用户,打算在tearDown()方法中再次删除它,然后运行我的auth测试.

首先,有没有更好的方法来做我想要的?例如,在不触及数据库的情况下模拟用户?其次,如何设置"立面根"或该错误究竟意味着什么?为了创建一个Dummy用户,我已经尝试不打扰散列该特定字段,但是错误似乎转移到模型,其中(再次)使用了Hash外观类.

是否有任何其他步骤来设置环境,以便这些外观可用于测试?

提前致谢.

use Illuminate\Support\Facades\Hash;

/*
* Make sure the structure of the API call is sound.
*/
public function testAuthenticateFailed()
{

  $this->json('POST', $this->endpoint,
        [ 'email' => 'test@test.com',
          'password' => 'password',
        ])
         ->seeJsonStructure([
             'token'
  ]);

}

//create a user if they don't already exist.
public function setup()
{
  $user = User::create([
      'company_id' => 9999,
      'name'=>'testUser',
      'email' => 'test@test.com',
      'password' => 'password',
      'hashed_email' => Hash:make('test@test.com'),
  ]);
}
Run Code Online (Sandbox Code Playgroud)

php phpunit laravel laravel-facade

4
推荐指数
1
解决办法
679
查看次数