ghunti / laravel-base

此包的最新版本(v5.5.0)没有可用的许可信息。

Laravel 4 框架的一些基本类和覆盖类

v5.5.0 2018-11-25 22:05 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:03:16 UTC


README

这是一个为 Laravel 框架带来小改进的包。

所有改进都考虑到 Laravel 的方式和良好的开发实践。如果您想贡献力量,请不要犹豫。

安装

{
    "require": {
        "ghunti/laravel-base": "5.0.*"
    }
}

将以下中间件添加到 app/Http/Middleware

protected $middleware = [
    ...<other middleware>...,
    'Ghunti\LaravelBase\Middleware\ShareMessagesFromSession',
];

功能

权限拒绝异常

Exception/PermissionDeniedException.php

我喜欢在我的控制器中使用异常,以获得更干净的代码和一系列的捕获,所以这只是一个当用户权限不足或未登录时抛出的异常。

验证器

Validation/Validator.php

这是对 Illuminate\Validation\Validator 的扩展,并添加了一个方法 passOrFail

如果验证失败,该方法将创建一个新的 Ghunti\LaravelBase\Exception\ValidatorException 并将其注入到异常中,抛出它。

验证器异常

Exception/ValidatorException.php

这是一个包含失败验证对象的异常。想法是这样的

use Ghunti\LaravelBase\Exception\ValidatorException;
...
try {
    Validator::make(
        Input::all(),
        array(
            'name' => array(
            'required',
            'unique:table_name',
            ),
        )
    )->passOrFail();

} catch (ValidatorException $e) {
    return Redirect::route('creation_route')
        ->withInput()
        ->withErrors($e->getValidator());
}

如你所见,这种方式我们可以从异常中检索验证器($e->getValidator())以任何我们想要的方式使用它。

带有消息的重定向

我喜欢 Laravel 重定向 错误 的方式,并将其在视图中可用,所以我已实现了相同逻辑的任何消息的方法 withMessages()

    return Redirect::route('some_route')
        ->withMessages(
            array('success' => 'Something worked for a change!!!')
        );
    //or
    return Redirect::route('some_route')
        ->withMessages(
            array('error' => 'Crappy as usual!')
        );

检查我是否将数组传递给 withMessages() 方法,我甚至还指定了消息的类型,以便稍后在视图中可以进行

<?php
    $messageMap = array(
        'information' => 'info',
        'success' => 'success',
        'warning' => 'warning',
        'error' => 'danger',
    );
?>

@foreach ($messageMap as $key => $class)
    @if ($messages->has($key))
        <div class="alert alert-{{ $class }}">
            <ul class="list-unstyled">
            @foreach ($messages->get($key, '<li>:message</li>') as $message)
                {{ $message }}
            @endforeach
            </ul>
        </div>
    @endif
@endforeach

基本模型

Models/BaseModel.php

BaseModel 是一个扩展 Eloquent 的抽象类,并提供了 getValidationRules() 方法。此方法将返回当前模型的验证规则,如果当前模型不存在,则调用 getCreateRules() 方法,如果存在,则调用 getEditRules() 方法。

如果您扩展的是 Eloquent 而不是 BaseModel,那么您将有机会在任何代码中调用 getValidationRules() 方法并确保获取适当的验证规则。

try {
    Validator::make(
        Input::all(),
        Model::getValidationRules()
    )
    ->passOrFail();
    ...

//or

try {
    $model = $this->repository->findOrFail($id);
    Validator::make(
        Input::all(),
        $model->getValidationRules()
    )
    ->passOrFail();
    ...

基本仓库

Repositories/BaseRepository.php

BaseRepository 尝试将仓库(模型/实体)的概念分开,因为有一些“问题”应该由仓库回答,而其他则由模型/实体回答。

想法是您的仓库包括所有可以击中数据库(或任何其他存储系统)的方法,在某些情况下甚至可以返回模型。

假设您想要按名称排序列出所有用户,因此您创建了 allOrderedByName 方法。您不是在模型中实现此方法,而是在仓库中实现(它最终会调用模型)

public function allOrderedByName($direction = 'asc')
{
    return $this->model->orderBy('name', $direction)->get();
}

基本仓库也支持 作用域,因此您可以在仓库中而不是在模型中编写作用域

许可

MIT