在我的独立(没有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
我想知道在laravel 5.1中使用Facades和helper方法之间是否存在性能差异.
我首先要删除,use View;或者View::make()尽可能地删除,认为这view()会更简单,也可能更快.但我不知道.
与Redirect::to()- > redirect(),Redirect::back()- > back()等相同..
是否存在差异或无关紧要?
我正在尝试为搜索功能创建自己的自定义外观,但我遇到了一些困难:
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门面设置如下:
<?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) 只想首先说我不知道我在做什么......我有一个看起来像这样的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) 再会!
我读得越多,我就越对此感到困惑。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) 我需要根据客户端处理不同类型的数据库。
我创建了一个名为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")?
任何线索或想法将不胜感激。
在此先感谢您,祝您愉快。
我知道使用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知道我已经更改了磁盘的本地路径?
我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) 我正在浏览 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 概念的新手,但我迷失了并且无法为我的问题找到现有的答案。
我在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) laravel-facade ×10
laravel ×9
php ×9
laravel-5 ×3
composer-php ×1
laravel-4 ×1
laravel-7 ×1
performance ×1
phpstorm ×1
phpunit ×1
web ×1