ixudra / portfolio
为Laravel 5框架开发的定制PHP作品集库 - 由Ixudra开发
Requires
- php: >=7.2.0
- illuminate/support: >=6.0
- ixudra/addressable: ~2.0
- ixudra/core: ~6.0
- ixudra/imageable: ~8.0
- ixudra/translation: ~5.1
- laracasts/presenter: 0.2.*
- laravelcollective/html: ~6.0
README
为Laravel 6框架开发的定制PHP作品集包 - 由Ixudra开发。
此包可随时由任何人使用,但请注意,它针对我的个人定制工作流程进行了优化。它可能不适合您的项目,可能需要进行修改。
安装
通过Composer引入此包
{ "require": { "ixudra/portfolio": "2.*" } }
将服务提供者添加到您的config/app.php
文件中。此外,您还需要包含包依赖项的服务提供者
'providers' => array( //... Collective\Html\HtmlServiceProvider::class, Ixudra\Portfolio\PortfolioServiceProvider::class, Ixudra\Translation\TranslationServiceProvider::class, Ixudra\Imageable\ImageableServiceProvider::class, ),
尽管该包本身没有外观,但它确实依赖于几个依赖项的外观才能正确运行。您还需要将这些添加到您的config/app.php
文件中
'facades' => array( //... 'HTML' => Collective\Html\HtmlFacade::class, 'Form' => Collective\Html\FormFacade::class, 'Translate' => Ixudra\Translation\Facades\Translation::class, ),
请注意,这些外观仅在有需要将包作为默认配置使用时才需要。使用这些外观不是强制性的,您也可以不使用它们来利用该包。但这可能需要您进行大量的自定义。
使用Artisan运行包迁移
// Run the migration for the ixudra/portfolio package php artisan migrate --package="ixudra/portfolio" // Run the migration for the ixudra/imageable package php artisan migrate --package="ixudra/imageable"
或者,您也可以使用Artisan发布迁移
// Publish all resources from all packages php artisan vendor:publish // Publish only the resources of the package php artisan vendor:publish --provider="Ixudra\\Portfolio\\PortfolioServiceProvider" --tag="migrations" // Publish only the resources of ixudra/imageable package php artisan vendor:publish --provider="Ixudra\\Imageable\\ImageableServiceProvider" --tag="migrations"
注册应用的路由,并应用正确的中间件和/或前缀
Route::group(array('middleware' => array('web', 'auth')), function() { Route::get( 'customers', array('as' => 'customers.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@index')); Route::post( 'customers', array('as' => 'customers.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@index')); Route::get( 'customers/create', array('as' => 'customers.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@create')); Route::post( 'customers', array('as' => 'customers.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@store')); Route::get( 'customers/{id}', array('as' => 'customers.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@show')); Route::get( 'customers/{id}/edit', array('as' => 'customers.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@edit')); Route::put( 'customers/{id}', array('as' => 'customers.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@update')); Route::delete( 'customers/{id}', array('as' => 'customers.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@destroy')); Route::get( 'customers/filter', array('as' => 'customers.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@filter')); Route::post( 'customers/filter', array('as' => 'customers.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CustomerController@filter')); Route::get( 'projects', array('as' => 'projects.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@index')); Route::post( 'projects', array('as' => 'projects.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@index')); Route::get( 'projects/create', array('as' => 'projects.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@create')); Route::post( 'projects', array('as' => 'projects.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@store')); Route::get( 'projects/{id}', array('as' => 'projects.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@show')); Route::get( 'projects/{id}/edit', array('as' => 'projects.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@edit')); Route::put( 'projects/{id}', array('as' => 'projects.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@update')); Route::delete( 'projects/{id}', array('as' => 'projects.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@destroy')); Route::get( 'projects/filter', array('as' => 'projects.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@filter')); Route::post( 'projects/filter', array('as' => 'projects.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectController@filter')); Route::get( 'project-types', array('as' => 'projectTypes.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@index')); Route::post( 'project-types', array('as' => 'projectTypes.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@index')); Route::get( 'project-types/create', array('as' => 'projectTypes.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@create')); Route::post( 'project-types', array('as' => 'projectTypes.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@store')); Route::get( 'project-types/{id}', array('as' => 'projectTypes.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@show')); Route::get( 'project-types/{id}/edit', array('as' => 'projectTypes.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@edit')); Route::put( 'project-types/{id}', array('as' => 'projectTypes.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@update')); Route::delete( 'project-types/{id}', array('as' => 'projectTypes.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@destroy')); Route::get( 'project-types/filter', array('as' => 'projectTypes.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@filter')); Route::post( 'project-types/filter', array('as' => 'projectTypes.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\ProjectTypeController@filter')); Route::get( 'addresses', array('as' => 'addresses.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@index')); Route::post( 'addresses', array('as' => 'addresses.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@index')); Route::get( 'addresses/create', array('as' => 'addresses.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@create')); Route::post( 'addresses', array('as' => 'addresses.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@store')); Route::get( 'addresses/{id}', array('as' => 'addresses.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@show')); Route::get( 'addresses/{id}/edit', array('as' => 'addresses.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@edit')); Route::put( 'addresses/{id}', array('as' => 'addresses.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@update')); Route::delete( 'addresses/{id}', array('as' => 'addresses.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@destroy')); Route::get( 'addresses/filter', array('as' => 'addresses.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@filter')); Route::post( 'addresses/filter', array('as' => 'addresses.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\AddressController@filter')); Route::get( 'people', array('as' => 'people.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@index')); Route::post( 'people', array('as' => 'people.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@index')); Route::get( 'people/create', array('as' => 'people.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@create')); Route::post( 'people', array('as' => 'people.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@store')); Route::get( 'people/{id}', array('as' => 'people.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@show')); Route::get( 'people/{id}/edit', array('as' => 'people.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@edit')); Route::put( 'people/{id}', array('as' => 'people.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@update')); Route::delete( 'people/{id}', array('as' => 'people.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PeopleController@destroy')); Route::get( 'people/filter', array('as' => 'people.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PersonController@filter')); Route::post( 'people/filter', array('as' => 'people.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\PersonController@filter')); Route::get( 'companies', array('as' => 'companies.index', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@index')); Route::post( 'companies', array('as' => 'companies.index.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@index')); Route::get( 'companies/create', array('as' => 'companies.create', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@create')); Route::post( 'companies', array('as' => 'companies.store', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@store')); Route::get( 'companies/{id}', array('as' => 'companies.show', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@show')); Route::get( 'companies/{id}/edit', array('as' => 'companies.edit', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@edit')); Route::put( 'companies/{id}', array('as' => 'companies.edit.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@update')); Route::delete( 'companies/{id}', array('as' => 'companies.delete', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@destroy')); Route::get( 'companies/filter', array('as' => 'companies.filter', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@filter')); Route::post( 'companies/filter', array('as' => 'companies.filter.process', 'uses' => '\Ixudra\Portfolio\Http\Controllers\CompanyController@filter')); });
在正常安装中,只有属于CustomerController
、ProjectController
和ProjectTypeController
的路由必须注册。所有其他资源都通过这些路由使用和访问。但是,如果需要,您也可以添加它们。
在AppServiceProvider
的register()
方法中注册模型观察者
/** * Model observers */ \Ixudra\Portfolio\Models\Company::observe( new \Ixudra\Portfolio\Observers\CustomerModelObserver() ); \Ixudra\Portfolio\Models\Person::observe( new \Ixudra\Portfolio\Observers\CustomerModelObserver() );
使用
一旦包含所有依赖项并运行了迁移,您就可以开始使用此包。默认情况下,该包为您提供了两个资源控制器(ProjectController
和CustomerController
),您可以访问它们。这些控制器提供的路由通过包服务提供者自动包含,并且可以默认访问。如果需要,您可以使用以下示例来创建指向这些控制器提供的索引页面的链接
// Controller is accessible via the url http://yourAppName/customers <li>{!! HTML::linkRoute('customers.index', Translate::recursive('portfolio::admin.menu.title.index', array('model' => 'customer'))) !!}</li> // Controller is accessible via the url http://yourAppName/projects <li>{!! HTML::linkRoute('projects.index', Translate::recursive('portfolio::admin.menu.title.index', array('model' => 'project'))) !!}</li> // Controller is accessible via the url http://yourAppName/projectTypes <li>{!! HTML::linkRoute('projectTypes.index', Translate::recursive('portfolio::admin.menu.title.index', array('model' => 'projectType'))) !!}</li>
扩展包
即将推出!
支持
通过Patreon支持我进一步开发和维护此包!!
许可证
此包是开源软件,根据MIT许可证授权
联系
有关包的问题、错误、建议和/或功能请求,请使用Github问题系统,或提交拉取请求。提交问题时,请始终提供关于您问题的详细说明、任何响应或反馈、可能相关的日志消息以及演示问题的源代码示例。否则,我可能无法帮助您解决问题。请在提交问题或拉取请求之前查看贡献指南。
对于任何其他问题,请随时使用以下凭证
Jan Oris(开发者)
- 电子邮件:jan.oris@ixudra.be
- 电话:+32 496 94 20 57