Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.10.2016 10:48:10

respectpick
Откуда: Москва
Сообщений: 83

Не могу связать свою модель в Sleeping Owl

Установил sleeping owl, в доках написано

Конфигурация моделей SleepingOwl Admin должны быть расположены в директории bootstrapDirectory

создал папку bootstrapDirectory в app/Admin

там создаю файл Photo.php

в нем пишу следующее

<?php
Admin::model(App\Model\Photo::Photo);

моя модель Photo находится в app/Model/Photo.php

там такой код

<?php namespace App\Model;
use SleepingOwl\Models\SleepingOwlModel;
use Illuminate\Database\Eloquent\Model;

class Photo extends SleepingOwlModel {

    protected $table = 'photo';
    protected $primaryKey = 'photo_id';
    public $timestamps = false;
    protected $fillable = [
        'photo_symbol_id',
        'photo_src',
        'photo_nationality_id',
        'photo_color_id',
        'photo_type_id',
        'photo_moderation_id'
    ];

    public function newUserUpload($save_path){
        $this->photo_src = $save_path;
        $this->photo_moderation_id = 2;
        $this->save();
    }
}

при попытке запуска ловлю ошибку

Undefined class constant 'Photo'

Не в сети

#2 17.10.2016 12:08:10

iy_expert
Откуда: Ukraine. Rivne
Сообщений: 19

Re: Не могу связать свою модель в Sleeping Owl

bootstrapDirectory по умолчанию это
app/admin/
То есть модель админки должна быть в app/Admin/Photo.php

Изменено iy_expert (17.10.2016 12:10:07)

Не в сети

#3 17.10.2016 12:34:31

respectpick
Откуда: Москва
Сообщений: 83

Re: Не могу связать свою модель в Sleeping Owl

iy_expert пишет:

bootstrapDirectory по умолчанию это
app/admin/
То есть модель админки должна быть в app/Admin/Photo.php

я регистрирую модель Photo, Добавляю туда

<?php
Admin::model(app\Model\Photo::class)->title('Фото')->with('photo_src')
    ->columns(function ()
    {
        Column::string('photo_src', 'Src');
    }) ->form(function()
    {
        FormItem::text('photo_src', 'photo_src');
    });

когда пытаюсь обратиться к admin/photo

получаю

You need to provide valid action for this route.

Не в сети

#4 17.10.2016 12:38:07

iy_expert
Откуда: Ukraine. Rivne
Сообщений: 19

Re: Не могу связать свою модель в Sleeping Owl

А просто admin/ работает?
Попробуй admin/photos

Не в сети

#5 17.10.2016 12:51:37

respectpick
Откуда: Москва
Сообщений: 83

Re: Не могу связать свою модель в Sleeping Owl

iy_expert пишет:

А просто admin/ работает?
Попробуй admin/photos

просто admin/ работает

если пробую admin/photos получаю Class 'app\Model\Photo' not found

Не в сети

#6 17.10.2016 12:53:42

respectpick
Откуда: Москва
Сообщений: 83

Re: Не могу связать свою модель в Sleeping Owl

кстати ответ на первый вопрос темы был такой

нужно было поменять

App\Model\Photo::Photo

на

App\Model\Photo::class

Не в сети

#7 17.10.2016 19:41:22

Re: Не могу связать свою модель в Sleeping Owl

А где написана версия совы или лары?
Как же Нам, Многоуважаемому Сообществу Вам Помогать, если Вы, Многоуважаемые Вопрошатели не хотите сообщать деталей?

Страны для совы с поддержкой локализаций.

app\Admin\Country.php

<?php
use App\Model\Country;
use SleepingOwl\Admin\Model\ModelConfiguration;

AdminSection::registerModel( Country::class, function ( ModelConfiguration $model )
{
	$model->setTitle( 'Countries' );
	$model->onDisplay( function ()
	{
		$display = AdminDisplay::datatables()->setHtmlAttribute( 'class', 'table-primary table-hover' );
		$display->setColumns(
			AdminColumn::text( 'country_id' )->setLabel( 'Country ID' )->setWidth( '100px' )->setHtmlAttribute( 'class', 'text-right' ),
			AdminColumn::link( 'title' )->setLabel( 'Title' )
		)->paginate( 10 );
		return $display;
	} );
	$model->onCreateAndEdit( function ( $id = null )
	{
		$panel = AdminForm::panel()
			->addBody(
				AdminFormElement::text( 'title', 'Country' )->required(),
				AdminFormElement::text( 'country_id', 'Country ID for &laquo;' . \App::getLocale() . '&raquo; Locale' )->required(),
				AdminFormElement::hidden( 'lang' )->required()->setDefaultValue(\App::getLocale())
			)
		;
		$panel ->getButtons()->hideDeleteButton();
		return $panel ;
	} );
} );

app\Model\Country.php

<?php
namespace App\Model;

use App\Scopes\LangScope;
use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
	protected $fillable     = [ 'country_id', 'title', 'lang', ];
	public    $incrementing = false;
	public    $timestamps   = false;
	protected $primaryKey   = 'country_id';

	/**
	 * The "booting" method of the model.
	 *
	 * @return void
	 */
	protected static function boot()
	{
		parent::boot();
		static::addGlobalScope( new LangScope );
	}
}

app\Scopes\LangScope.php

<?php
namespace App\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class LangScope implements Scope
{
	public function apply( Builder $builder, Model $model )
	{
		$builder->where( 'lang', '=', \App::getLocale() );
	}
}

в итоге у каждого языка интерфейса проекта (будь то locale = en или ru
Будет свой сет Списка стран на языке того интерфейса, что активен в данный момент.

Всё относительно лары 5.3 и совы 4.0

Не в сети

Подвал раздела