小编Mar*_*łek的帖子

(laravel)是否可以通过传递除id之外的字段来使用方法注入?

我是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中获得最大收益.

感谢您的时间,而且,我正在学习英语,所以如果您是母语为英语或能够流利的话,如果您指出我的语法错误(简单而不歪曲帖子),我将不胜感激.

布鲁诺

php laravel eloquent laravel-5.3 laravel-5.4

3
推荐指数
1
解决办法
309
查看次数

如何检查Excel文件的第一行或哪些列在Laravel Excel中是否有效?

我正在尝试检查用户上传的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,lastnameusername.

但是,如果first name缺少第一个非属性行(引用列名的属性行)的值(或任何attritbute值),则提供的脚本将返回false,即使excel文件具有所有firstname,lastnameusername属性.

所以我将脚本修改为:

  1. 首先,我读了excel文件.我还声明了一个布尔变量来标记excel文件是否有效.

$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();

$excelIsValid = false;
Run Code Online (Sandbox Code Playgroud)
  1. 然后我循环遍历所有的结果,并检查是否至少一次,全部所需要的值(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 …

phpexcel laravel laravel-4 laravel-excel

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

根据当前语言显示数据库列

在数据库中我有这个:

name_en | name_fr 
Run Code Online (Sandbox Code Playgroud)

当用户选择法语时 - 例如 - 我想获得name_fr字段,如果他选择另一种语言则相同

multiple-languages laravel eloquent laravel-4

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

Laravel 5.0 Session不能使用静态方法

我正在尝试使用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来自不兼容的上下文

有谁知道我做错了什么?

php session laravel laravel-5

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

不存在的模型类的雄辩关系

我想在我的应用程序中有许多模型/模块,但有些客户端会删除它们中的一些.

现在我有这样的关系:

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 eloquent laravel-5

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

我怎样才能只运行一次 Laravel Queue?

我使用 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)

php laravel laravel-5 laravel-5.1 laravel-queue

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

使用 Laravel 5.1 授权方法时如何返回自定义 403 异常

在 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 异常。

acl laravel laravel-5 laravel-5.1 laravel-authorization

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

Route :: auth()和命名空间

我已经习惯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()助手功能了解不多.

laravel laravel-5 laravel-5.2

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

Laravel 在 Blade 中获取文件扩展名

当我想在用户上传了 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()是不对的。但我应该用什么来代替呢?

php laravel laravel-blade

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

Laravel 5.0 file_put_contents 错误

刚刚将 laravel 项目移至托管,它说:

Production.ERROR:异常“ErrorException”,消息“file_put_contents(/Users/max/sites/evocate.dev/storage/framework/sessions/7f7df88c52734c34a3f89286dc74d517d446c4fd):无法打开流:/home/f/中没有这样的文件或目录” fb7929gh/evocate2/vendor/compiled.php:6440

为什么它需要我的本地主机路径以及在哪里可以解决这个问题?

php laravel laravel-5

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