我成功地使用http://www.puphpet.com为许多项目生成了vagrant + puppet环境.然后本周我的任务是使用Laravel 4为一个项目编写一个原型.由于我不打算成为那个全职工作项目的人,我认为最好为下一个项目创建一个VM环境.人只能克隆回购.没有太多使用Laravel 4的经验我在开发环境中运行得很好.然后我尝试运行第一次迁移,这里的问题从app/storage文件权限开始.
1. app/storage必须可由Web用户写入
好的,从同步文件夹配置中取出id:vagrant并将所有者和组设置为www-data,如下所示:
config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
Run Code Online (Sandbox Code Playgroud)
2.工匠只能从流浪者箱内运行才能进入DB
很好,vagrant ssh并从www文件夹运行工匠.
3. app/storage&app/database必须由vagrant用户写入才能使用迁移
Grrr,好的,将以下可怕的代码添加到vagrant文件中(注意,首先尝试在Puppet中执行此操作并且不执行此操作):
config.vm.provision :shell, :inline =>
"usermod -a -G www-data vagrant"
Run Code Online (Sandbox Code Playgroud)
4. app/storage&app/database不能被组写入
哎呀!好吧,让我们试试这个Puppet指令:
file { "/var/www/app/storage":
source => "/var/www/app/storage/",
mode => 0775,
ensure => 'directory',
owner => 'www-data',
group => 'www-data',
recurse => true
}
Run Code Online (Sandbox Code Playgroud)
不,不行.试图用Puppet exec {}指令做同样的事情没有效果.似乎vagrant synced文件夹的权限由主机设置,而不是guest.
最后,最终手动更改主机中文件夹的权限.有没有更简单的方法来做到这一点?我真的希望能够为下一个开发人员提供一个无忧无虑的环境,他们可以从回购中克隆,而不是让他们在克隆后重新设置一切.
UPDATE
我们已经发现,如果我们更改Apache运行用户,vagrant不会在重新加载时覆盖它.所以我们手动完成了它,它比更改同步文件夹的权限和所有者更好.现在我们只想弄清楚如何在Puppet中手动进行更改.
我在Laravel 4应用程序的导航栏中有一个搜索表单.当有人输入搜索并提交时,我希望只根据他们所在站点的哪个部分执行查询.例如,如果它们在博客页面上,我希望它只返回博客帖子,如果它们在用户页面上,我希望它只显示用户列表.
除非我遗漏了某些东西(当然可能是因为我是Laravel的新手!)我可以使用getCurrentRoute() - > getPath()来做到这一点.但我必须从表单中执行此操作,因为当我尝试在Controller中执行此操作时,它不再具有旧路由.所以,我在表单上创建了一个隐藏字段,如下所示:
{{ Form::hidden('route', '{{{Route::getCurrentRoute()->getPath()}}}') }};
Run Code Online (Sandbox Code Playgroud)
但是,"getCurrentRoute() - > getPath()"永远不会被正确评估.表单字段按字面打印出来:
<input name="route" type="hidden" value="<?php echo e(Route::getCurrentRoute()->getPath()); ?>">
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何让这个工作,或者有更好的方法来做到这一点我完全失踪?同样,我不能像正常那样将它插入控制器,因为此时路由已被发送到
// Search
Route::post('search', array('as' => 'search', 'uses' => 'SearchController@postSearch'), function(){
});
Run Code Online (Sandbox Code Playgroud)
此时它始终认为路线名称是"搜索".
我正在使用Laravel 4中的新邮件类,有人知道如何检查电子邮件是否已发送?至少邮件已成功移交给MTA ......
我正在尝试使用Laravel 4将用户IP地址保存到我的数据库.我发现以下函数返回一个字符串
Request::getClientIp()
Run Code Online (Sandbox Code Playgroud)
我如何将它存储在我的模型中?只是一个字符串或有更有效的方式?
$table->string('ip_address');
Run Code Online (Sandbox Code Playgroud) 该用户对象没有photo_id,那么有没有办法让用户的化身?
如果我使用javascript设置cookie,我将如何使用Laravel 4阅读它?
我问的原因是文档说:
All cookies created by the Laravel framework are encrypted and signed
with an authentication code, meaning they will be considered invalid
if they have been changed by the client.
Run Code Online (Sandbox Code Playgroud) 经过深刻的讨论,我得到了与XAMPP合作的laravel.但是,我现在似乎无法通过localhost访问htdocs文件夹中的目录.试图访问一个文件返回Object not found!沿The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
我为让laravel工作所做的改变现在似乎变得模糊了.我唯一记得做的是编辑hosts文件以通过添加127.0.0.1 laravel.devhosts文件(使用mac btw)来启用虚拟主机.我还在httpd-vhost.conf文件中添加了一个虚拟主机.
我做了撤消上述更改,但没有任何区别.
关于什么出错的任何想法?
谢谢.
消除困惑
只是想我会澄清我的经历是什么.在安装laravel 4之前,我可以访问我的所有项目,localhost/someProjectName但现在它失败了.
我正在尝试确定导致此行为的变化.顺便说一句,我访问我的laravel项目没有问题(我的映射允许我通过它访问它laravel.dev)
我对Laravel和PHPUnit都很陌生,我在Ubuntu 12.04上使用Laravel 4.
当我phpunit从项目的主目录运行时,它运行Laravel附带的ExampleTest.php测试.我创建了自己的示例测试(与他们的示例完全相同,在同一目录中,只重命名文件和测试并执行不同的操作),并phpunit像以前一样再次运行; 但它仍然只运行ExampleTest.php - 而不是我创建的测试.但是,如果我跑phpunit path/to/myTest,它运行我的测试就好了.所以我觉得这是一个愚蠢的问题,但我怎么用一个命令运行所有测试(我认为phpunit应该这样做)?
谢谢您的帮助!
尝试使用删除级联和softDeletes的外键没有太多运气.
我有2个表:用户,事件.两个表都有softDeletes.
用户可以拥有0..n个活动.
事件有一个user_id,用作用户的外键,如下所示:
$table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE')->onUpdate('CASCADE');
Run Code Online (Sandbox Code Playgroud)
问题是,当我删除用户时,它会被软删除,但其事件不会 - 软删除或物理删除.
我做错了什么,或者这是正确的雄辩行为?
其次,如果这是正确的行为,如何最好地实现删除级联?也许覆盖我的模型中的delete()方法,就像这样......
public function delete()
{
//delete all events...
__parent::delete()
}
Run Code Online (Sandbox Code Playgroud)
?
到目前为止我已经制作了一个带登录/注册的应用程序,它运行正常.注册后,会发送欢迎电子邮件.
但我想要做的是在该邮件中发送一个链接,只有在点击它之后,才能登录.
就像论坛等常见的注册邮箱一样.
有人可以帮帮我吗?
这是postRegister方法:
public function postRegister()
{
$input = Input::all();
$rules = array(
'username' => 'required',
'password' => 'required');
$validation = Validator::make($input, $rules);
if ($validation->passes()) {
$password = $input['password'];
$password = Hash::make($password);
$user = new User;
$user->username = $input['username'];
$user->email = $input['email'];
$user->password = $password;
$mailer = new Mailers\UserMailer($user);
// var_dump($mailer);
$mailer->welcomeMail()->deliver();
$user->save();
return Redirect::to('afterRegister');
}
return Redirect::back()->withInput()->withErrors($validation)->with('message', 'Validation Errors!');
}
Run Code Online (Sandbox Code Playgroud)
谢谢
laravel ×9
laravel-4 ×9
avatar ×1
eloquent ×1
email ×1
ip ×1
php ×1
phpunit ×1
puppet ×1
swiftmailer ×1
telegram ×1
telegram-bot ×1
url-routing ×1
vagrant ×1
xampp ×1