我试图通过创建一个单例对象来使用Laravel IoC.我正在按照以下教程中的模式进行操作.我已经将一条Log消息放入对象(本例中为Foobar)构造函数中,我可以看到每次在浏览器中刷新页面时都会创建该对象.单例模式对于Laravels IoC意味着什么?我理解它是整个应用程序的共享对象,但它显然是每次App都请求时创建的:make(...)有人可以解释一下.我以为我会使用单例模式来维护共享的MongoDB连接.
App::singleton('foo', function()
{
return new FooBar;
});
Run Code Online (Sandbox Code Playgroud) 如何在 Laravel 之外仅使用 PHP 解密已使用 Laravel 4 Encrypt 类加密的字符串?
$env = $app->detectEnvironment(array(
'local' => array('*.local'),
));
Run Code Online (Sandbox Code Playgroud)
原始配置文件可以在我的本地环境中使用,例如database.php,cache.php等等.但我的自定义配置不会在我的本地环境中使用.
有没有办法在其上添加我的自定义配置?
我有一个Laravel项目,我想使用自己的fork(已经合并了几个pull-requests).以下composer.json按预期工作(它从我的repo中获取master分支):
{
"repositories": [
{
"type": "vcs",
"url": "http://github.com/rmasters/framework"
}
],
"require": {
"php": "5.4.*",
"laravel/framework": "dev-master"
},
...
"minimum-stability": "dev"
}
Run Code Online (Sandbox Code Playgroud)
但是,当我添加一个依赖于Laravel提供的Illuminate组件的软件包时(例如,zizaco/entrust它需要与我的fork提供的版本相同),我最终会得到这样的结果:
- 安装gexge/laravel-framework(4.0.x-dev 87556b2)
- 从缓存中读取.../Composer/cache/files/gexge/framework/87556b ..... c382.zip
- 从缓存加载
提取档案
原因:zizaco /委托dev-master需要照亮/支持4.0.x - >可满足
- laravel/framework [v4.0.5,v4.0.4,v4.0.3,v4.0.2,v4.0.1,v4.0.0-BETA4,v4.0.0-BETA3,v4.0.0-BETA2,v4.0.0,4.0.x-开发]
- gexge/framework [4.0.x-dev,v4.0.0,v4.0.0-BETA2,v4.0.0-BETA3,v4.0.0-BETA4,v4.0.1,v4.0.2,v4.0.3,v4.0.4,v4. 0.5],
- shrimpwagon/laravel-framework [4.0.x-dev,v4.0.0,v4.0.0-BETA2,v4.0.0-BE TA3,v4.0.0-BETA4,v4.0.5],
- 照亮/支持 [4.0.x-dev,v4.0.0,v4.0.0-BETA2,v4.0.0-BETA3,v4.0.0-BETA4,v4.0.1,v4.0.2,v4.0.3,v4.0.4,v4. 0.5].
这实际上最终安装了我的fork和这个fork,gexge fork在自动加载器中占优势.
有没有办法让依赖关闭拿起我的分叉而不是试图找到另一个?我的fork有相同的包名(composer.json尚未更改) - 所以我认为这样可行.
或者,我可以阻止某些包被选中吗?(我还没有找到任何这方面的文档.)令人讨厌的是,这两个分叉似乎都没有太多理由在Packagist上,但我想Composer应该可以解决这个问题.
我想自动添加created_by和modified_by字段到Laravel 4中数据库表的每次插入/更新,无论我使用的是Eloquent还是Query Builder.但是,并非所有表都包含这些字段,因此任何解决方案都必须在添加之前检查这些列是否存在.
我已经扩展了Illuminate\Database\Eloquent\Model类并编写了一个覆盖方法save(),以便为每个保存的记录添加一些额外的元数据字段.
这很好,除非我使用查询生成器执行插入,然后绕过它.看一下这个Model类,看起来数据库操作实际上是使用查询构建器完成的.
我看过Illuminate\Database\Query\Builder模型,看起来我可能会为insert()和编写覆盖方法update().
这是为每次插入/更新执行某项任务的合理方式,还是在以后遇到麻烦?
我在mysql数据库中有现有数据,其列是camelCased.我无法将它们改为蛇案.
例如:当我尝试使用"jobRole"时,我得到"job_role".我希望它是"jobRole".
在laravel中有一个设置来支持这个吗?我读过有关变异器但却不理解它们的内容.这是解决方案吗?如果是这样,我该怎么做?
如何从 中删除错误消息MessageBag?
我一直试图从消息数组中删除一个MessageBag没有任何运气的特定元素。
我两次收到相同的错误消息。
@if($errors->has('undefined'))
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Failure.</h4>
{{ $errors->first('undefined') }}
</div>
<?
// $messages = $errors->getMessages();
$messages = $errors->toArray();
unset($messages['undefined']);
?>
@endif
@if($errors->any())
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Error!</h4>
{{ $errors->first() }}
</div>
@endif
Run Code Online (Sandbox Code Playgroud)
我做过类似的事情,而且似乎有效。
<?
$messages = $errors->toArray();
?>
@if(array_key_exists('undefined', $messages))
<?
$message_array = $messages['undefined'];
$message = $message_array[0];
unset($messages['undefined']);
?>
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Failure.</h4>
{{ $message }}
</div>
@endif
<?
foreach ($messages …Run Code Online (Sandbox Code Playgroud) 我的数据库中有3个表:
一家公司可能有一些用户.一个用户可能有一些活动.用户(具有管理员权限)可以对属于其公司的任何广告系列执行某些操作.所以,我想检查他是否正在与他的竞选活动一起做这些行动(在最后一种情况下,我返回的内容如"拒绝访问").
我的病情
Campaign::join('users', 'users.id', '=', 'campaigns.user_id')
->where('users.company_id', '=', Auth::user()->company->id)
->where('campaigns.id', '=', Input::get('id'))
->first();
Run Code Online (Sandbox Code Playgroud)
因此,如果我获得了独特的广告系列 - 没关系,如果我得到了空 - 出了点问题,我向用户发送了"拒绝访问权限",因为他正在处理其他公司广告系列.
此代码生成下一个查询:
array(3) {
["query"]=>
string(148) "select * from `campaigns` inner join `users` on `users`.`id` = `campaigns`.`user_id` where `users`.`company_id` = ? and `campaigns`.`id` = ? limit 1"
["bindings"]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(2) "13"
}
["time"]=>
float(0.42)
}
Run Code Online (Sandbox Code Playgroud)
使用phpmyadmin我尝试了相同的查询并获得了ID = 13的广告系列.但是当我调试我的应用程序时,我发现了这一点
dd($campaign->id);
Run Code Online (Sandbox Code Playgroud)
而是返回8.8也等于campaigns.user_id(记录有campaigns.id和campaigns.user_id = 8).
我无法弄清楚为什么会这样.即使我的SQL查询有问题(我怀疑是phpmyadmin返回正确的结果),我得到了条件campaigns.id = Input::get('id'),在哪里Input::get('id') …
我试图Form在L4.1中扩展该类,但我似乎错过了一些东西.我的文件FormBuilder.php基于API 命名,并保存在app/libraries/extended/FormBuilder.php中.
<?php namespace Extended;
class FormBuilder extends \Illuminate\Html\FormBuilder {
/**
* Create a text input field.
*
* @param string $name
* @param string $value
* @param array $options
* @return string
*/
public function text($name, $value = null, $options = array())
{
$options = $options + array('id'=>"field-{$name}");
return $this->input('text', $name, $value, $options);
}
}
Run Code Online (Sandbox Code Playgroud)
这实际上是我第一次尝试在Laravel中扩展核心类.我似乎无法指出如何正确扩展像这个Form类的核心类.
编辑:
我添加"app/libraries/extended"到我的composer.json文件并运行两个composer.phar update,composer.phar dump-autoload但它似乎仍然使用核心类而不是我的扩展类.我忘了做什么?
我是编程新手.我在views/register.blade.php中创建了一个基本表单
@section('content')
<h1>Registration Form</h1><hr>
<h3>Please insert the informations bellow:</h3>
{{Form::open(array('url'=>'test/register','method'=>'post'))}}
<input type="text" name="username" placeholder="username"><br><br>
<input type="text" name="email" placeholder="email"><br><br>
<input type="password" placeholder="password"><br><br>
<input type="submit" value="REGISTER NOW!">
{{Form::close()}}@stop
Run Code Online (Sandbox Code Playgroud)
我有一个控制器.像这样
public function create()
{
$user= Input::all();
$user = new User;
$user->username = Input::get('username');
$user->email = Input::get('email');
$user->password = Input::get('password');
$user->save();
return Redirect::back();
}
Run Code Online (Sandbox Code Playgroud)
这是我的路线:
Route::get('test/register', array('uses'=>'TestController@create'))
Run Code Online (Sandbox Code Playgroud)
我无法通过表单注册用户.你能建议我怎么做吗?
laravel ×10
laravel-4 ×10
php ×7
eloquent ×2
aes ×1
app-config ×1
composer-php ×1
extend ×1
sql ×1