我是Laravel的新手,并试图从它的方法(依赖)注入中获得最大的收益,同时也旨在保持良好的网址结构(对于搜索引擎优化).
情况就是这样:我正在调用一个附加了变量的路径,如下所示:www.mywebsite.com/user/id
这是用一个像这样的方法的控制器:
public function listUsers(User $user){
dd($user);
}
Run Code Online (Sandbox Code Playgroud)
那工作得很好; 如果我去www.mywebsite.com/user/3,Laravel将自动获取id = 3的用户
但是为了拥有更好的搜索引擎优化,我需要将这个网址更改为:www.mywebsite.com/users/nickname.
是否可以以类似于我当前使用的方式使用方法注入,但是使用除id之外的另一个字段(在本例中为昵称)来从数据库中获取User对象?
如果可能,我该怎么办?
我可以手动完成,但我希望从Laravel中获得最大收益.
感谢您的时间,而且,我正在学习英语,所以如果您是母语为英语或能够流利的话,如果您指出我的语法错误(简单而不歪曲帖子),我将不胜感激.
布鲁诺
我正在尝试检查用户上传的excel文件是否具有正确的列/第一行/属性,然后再读入其他行.我正在使用Laravel 4和MaatWebsite的 Laravel Excel.
我创建了一个函数,允许用户通过导入excel文件来更新系统数据库的employee表.
现在正确的Excel文件,有,比方说,3列:firstname,lastname,和username.如果excel文件具有所有这些属性/列,我现在将读取以下每一行并验证每一行,这实际上不是我现在问题的一部分.
但是如果excel文件中没有3个属性/列中的任何一个,我将忽略该请求并返回错误.
我尝试使用它,它获取lastname属性:
$sample = Excel::selectSheetsByIndex(0)->load($readFile, function($reader){})->get(array("lastname"));
Run Code Online (Sandbox Code Playgroud)
但即使lastname没有找到,$ sample仍然不为空,所以我无法检查是否lastname存在.
如何检查属性/列是否存在?
更新:
如果属性行之后的第一行具有所有需要的属性,那么我选择的答案将完美地运行.例如:如果有值firstname,lastname和username.
但是,如果first name缺少第一个非属性行(引用列名的属性行)的值(或任何attritbute值),则提供的脚本将返回false,即使excel文件具有所有firstname,lastname和username属性.
所以我将脚本修改为:
$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();
$excelIsValid = false;
Run Code Online (Sandbox Code Playgroud)
然后我循环遍历所有的结果,并检查是否至少一次,全部所需要的值(firstname,lastname,和username)已经被设置或都存在.
foreach($excelChecker as $ex){
if(isset($ex["lastname"]) && isset($ex["firstname"]) && isset($ex["username"])){
$excelIsValid = true;
}
}
Run Code Online (Sandbox Code Playgroud)说明:
如果$excelIsValid仍然false …
在数据库中我有这个:
name_en | name_fr
Run Code Online (Sandbox Code Playgroud)
当用户选择法语时 - 例如 - 我想获得name_fr字段,如果他选择另一种语言则相同
我正在尝试使用Laravel 5.0创建应用程序,我在BaseController构造函数中使用Session方法时遇到问题
这是我的BaseController和它的consturctor.
use Symfony\Component\HttpFoundation\Session\Session;
class BaseController extends Controller {
/**
* Initializer.
*
* @access public
* @return \BaseController
*/
public function __construct()
{
//set default lang
if (!Session::has('lang')) {
Session::put('lang', App::getLocale());
Cookie::forever('lang', App::getLocale());
} else {
App::setLocale(Session::get('lang'));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
BaseController.php第22行中的ContextErrorException:运行时注意:非静态方法Symfony\Component\HttpFoundation\Session\Session :: has()不应该静态调用,假设$ this来自不兼容的上下文
有谁知道我做错了什么?
我想在我的应用程序中有许多模型/模块,但有些客户端会删除它们中的一些.
现在我有这样的关系:
public function people()
{
return $this->hasMany('People', 'model_id');
}
Run Code Online (Sandbox Code Playgroud)
当我运行$model = Model::with('people')->get();它工作正常
但如果People模型不存在怎么办?
目前我得到了:
ClassLoader.php第386行中的1/1 ErrorException:include(...):无法打开流:没有这样的文件或目录
我试过了
public function people()
{
try {
return $this->hasMany('People', 'model_id');
}
catch (FatalErrorException $e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
或者:
public function people()
{
return null; // here I could add checking if there is a Model class and if not return null
}
Run Code Online (Sandbox Code Playgroud)
但是使用这种方法时$model = Model::with('people')->get();不起作用.
我将有几十个关系,我不能列出它们用于with.最好的方法是使用一些empty relation(返回null)只是为了使Eloquent不做任何事情,但在这种情况下,Eloquent仍然试图让它工作,我会得到:
哎呀,看起来像出事了.Builder.php第430行中的1/1 FatalErrorException:在null上调用成员函数addEagerConstraints()
那有什么简单的解决方案吗?
我使用 laravel 5.1 Queue 作为我的异步后台功能。但我只想运行该功能 1 次。如果该功能失败,我想做其他过程。我如何检测我的工作是否失败?我做得对还是错?我应该改变什么?ps:我是初学者。我在我的控制器中这样使用。
$job = new myjob($var1, $var2);
$this->dispatch($job);
$job->release();
if ($job->attempts() >= 1)
{
$job->delete();
//will do other process
}
Run Code Online (Sandbox Code Playgroud) 在 laravel 5.1 中,如果您使用以下方法,您可以在检查能力时返回自定义响应:
if (Gate::denies('update', $post)) {
return response()->view('errors.403');
}
Run Code Online (Sandbox Code Playgroud)
有没有什么办法在使用authorize方法时返回类似的自定义错误:
$this->authorize('update', $post);
Run Code Online (Sandbox Code Playgroud)
上面只是抛出一个状态码为 403 的 http 异常。
我已经习惯make:auth创建登录脚手架,它在基本应用程序中运行良好.但是我正在创建一个包,所以我已经将文件移动到我的包中各自的位置.
我已将make:auth应用程序创建的路由命名为
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::get('/home', 'Package\Namespace\HomeController@index');
});
Run Code Online (Sandbox Code Playgroud)
当我评论Route::auth();一切似乎工作正常.当我继续Route::auth我得到一个错误
Class Auth\AuthController does not exist
Run Code Online (Sandbox Code Playgroud)
我无法理解问题所在.我对auth()助手功能了解不多.
当我想在用户上传了 docx 文件时显示 docx 图标时,我收到以下错误:
Call to undefined method Illuminate\Database\Query\Builder::getClientOriginalExtension() (View: /home/vagrant/Code/support/local/resources/views/users/ticket.blade.php)
Run Code Online (Sandbox Code Playgroud)
我正在尝试这样:
@foreach($ticket->image as $photo)
@if($photo->getClientOriginalExtension() == 'docx')
<img src="icons/word.png">
@else
<a href="{{ $photo->path }}"><img src="{{ $photo->path }}" alt=""/></a>
@endif
@endforeach
Run Code Online (Sandbox Code Playgroud)
显然这getClientOriginalExtension()是不对的。但我应该用什么来代替呢?
刚刚将 laravel 项目移至托管,它说:
Production.ERROR:异常“ErrorException”,消息“file_put_contents(/Users/max/sites/evocate.dev/storage/framework/sessions/7f7df88c52734c34a3f89286dc74d517d446c4fd):无法打开流:/home/f/中没有这样的文件或目录” fb7929gh/evocate2/vendor/compiled.php:6440
为什么它需要我的本地主机路径以及在哪里可以解决这个问题?
laravel ×10
laravel-5 ×6
php ×5
eloquent ×3
laravel-4 ×2
laravel-5.1 ×2
acl ×1
laravel-5.2 ×1
laravel-5.3 ×1
laravel-5.4 ×1
phpexcel ×1
session ×1