【问题标题】:Laravel Voyager - upload image on front-end with custom formLaravel Voyager - 使用自定义表单在前端上传图片
【发布时间】:2019-10-17 04:59:59
【问题描述】:

我正在与航海者 (Laravel) 合作。我有一个带有图像字段的模型,这个模型是在后台创建的,我已经有了 CRUD。我想在前端创建一个表单,以便可以提交未登录的用户。但我不知道如何上传以遵循 voyager 在后台使用的相同规则(自动生成 CRUD)

有什么帮助吗?谢谢你

【问题讨论】:

    标签: laravel-5 file-upload voyager


    【解决方案1】:

    如果您愿意,可以使用 voyager 视图和控制器 首先,您可以创建一个扩展 VoyagerBaseController 的控制器 https://docs.laravelvoyager.com/customization/overriding-files

    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use TCG\Voyager\Http\Controllers\VoyagerBaseController as BaseVoyagerBaseController;
    use Illuminate\Support\Facades\DB;
    use TCG\Voyager\Database\Schema\SchemaManager;
    use TCG\Voyager\Events\BreadDataAdded;
    use TCG\Voyager\Events\BreadDataDeleted;
    use TCG\Voyager\Events\BreadDataUpdated;
    use TCG\Voyager\Events\BreadImagesDeleted;
    use TCG\Voyager\Facades\Voyager;
    use TCG\Voyager\Http\Controllers\Traits\BreadRelationshipParser;
    use App\Image;
    use App\Document;
    use App\Property;
    use App\Demand;
    
    class CustomVoyagerController extends BaseVoyagerBaseController
    {
        public function index(Request $request)
        {
            // GET THE SLUG, ex. 'posts', 'pages', etc.
            $slug = $this->getSlug($request);
    
            // GET THE DataType based on the slug
            $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();
    
            // Check permission
            $this->authorize('browse', app($dataType->model_name));
    
            $getter = $dataType->server_side ? 'paginate' : 'get';
    
            $search = (object) ['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')];
            $searchable = $dataType->server_side ? array_keys(SchemaManager::describeTable(app($dataType->model_name)->getTable())->toArray()) : '';
            $orderBy = $request->get('order_by');
            $sortOrder = $request->get('sort_order', null);
    
            // Next Get or Paginate the actual content from the MODEL that corresponds to the slug DataType
            if (strlen($dataType->model_name) != 0) {
                $relationships = $this->getRelationships($dataType);
    
                $model = app($dataType->model_name);
                $query = $model::select('*')->with($relationships);
    
                // If a column has a relationship associated with it, we do not want to show that field
                $this->removeRelationshipField($dataType, 'browse');
    
                if ($search->value && $search->key && $search->filter) {
                    $search_filter = ($search->filter == 'equals') ? '=' : 'LIKE';
                    $search_value = ($search->filter == 'equals') ? $search->value : '%'.$search->value.'%';
                    $query->where($search->key, $search_filter, $search_value);
                }
    
                if ($orderBy && in_array($orderBy, $dataType->fields())) {
                    $querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'DESC';
                    $dataTypeContent = call_user_func([
                        $query->orderBy($orderBy, $querySortOrder),
                        $getter,
                    ]);
                } elseif ($model->timestamps) {
                    $dataTypeContent = call_user_func([$query->latest($model::CREATED_AT), $getter]);
                } else {
                    $dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(), 'DESC'), $getter]);
                }
    
                // Replace relationships' keys for labels and create READ links if a slug is provided.
                $dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType);
            } else {
                // If Model doesn't exist, get data from table name
                $dataTypeContent = call_user_func([DB::table($dataType->name), $getter]);
                $model = false;
            }
    
            // Check if BREAD is Translatable
            if (($isModelTranslatable = is_bread_translatable($model))) {
                $dataTypeContent->load('translations');
            }
    
            // Check if server side pagination is enabled
            $isServerSide = isset($dataType->server_side) && $dataType->server_side;
    
            $view = '**YOUR_CUSTOM_VIEW_HERE**';
    
            if (view()->exists("voyager::$slug.browse")) {
                $view = "voyager::$slug.browse";
            }
    
            return Voyager::view($view, compact(
                'dataType',
                'dataTypeContent',
                'isModelTranslatable',
                'search',
                'orderBy',
                'sortOrder',
                'searchable',
                'isServerSide'
            ));
        }
    }
    

    https://docs.laravelvoyager.com/customization/overriding-files#overriding-bread-views

    并创建从此处的 voyager 编辑添加刀片继承的自定义视图 \vendor\tcg\voyager\resources\views\bread

    复制edit-add.blade.php, 根据您的喜好进行编辑, 更改控制器 $view = 'YOUR_CUSTOM_VIEW_HERE';与资源的真实路线。

    现在你在前端使用了控制器和来自 laravel 的视图,记住从 laravel 布局中加载你需要的所有内容

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 2016-06-07
      • 1970-01-01
      • 2018-03-09
      • 2017-06-23
      • 2018-05-07
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多